Je souhaite utiliser un conteneur Docker MySQL pour plusieurs projets exécutés sur le même serveur.
En utilisant les fichiers docker-compose v3, j'ai simplement la même configuration de conteneur mysql dans chacun des projets, et ils ont le même container_name
:
version: "3"
services:
app1:
image: foo
links:
- mysql
mysql:
image: mysql/mysql:5.7
container_name: shared_mysql
La deuxième application a un docker-compose.yml
fichier, mais avec app2
au lieu de app1
.
Lors de l'exécution docker-compose up --no-recreate
pour app2
, J'obtiens une erreur:
Creating shared_mysql ... error
ERROR: for shared_mysql
Cannot create container for service mysql: Conflict.
The container name "/shared_mysql" is already in use by container "deadbeef".
You have to remove (or rename) that container to be able to reuse that name.
Que puis-je faire pour partager le conteneur MySQL entre plusieurs projets Docker?
Vous pouvez simplement éviter de redéfinir le mysql dans l'un des deux fichiers docker-compose.yml et connecter mysql et les autres conteneurs au même réseau.
Pour ce faire, créez un réseau:
docker network create shared
Attribuez votre réseau à votre conteneur mysql:
version: '3'
services:
mysql:
...
networks:
- shared
networks:
shared:
external:
name: shared
Pour tout autre conteneur qui a besoin d'accéder à mysql, ajoutez simplement la même définition de réseau que ci-dessus:
version: '3'
services:
app1:
...
networks:
- shared
app2:
...
networks:
- shared
...
networks:
shared:
external:
name: shared
Si votre conteneur n'est créé qu'à partir d'un autre fichier de composition, vous pouvez utiliser la fonction liens externes dans docker-compose.
Si vous voulez que les deux fichiers de composition de docker puissent créer le conteneur mysql, je vous suggère de regarder dans Partager les configurations de composition entre les fichiers et les projets . Dans ce cas, vous pouvez créer un fichier de base qui ne définit que mysql et l'étendre/fusionner dans les deux fichiers de composition des applications.
Nous le résolvons en utilisant un troisième projet comprenant tous les services partagés que nos micro-services utilisent comme mysql, kafka et redis.
dans chacun de nos fichiers docker-compose, nous avons ajouté des liens externes vers ces services.
C'est un peu sale mais ça marche bien.
Vous pouvez suivre ce problème sur github, https://github.com/docker/compose/issues/2075 qui parle du même problème que vous rencontrez.