I want to use a MySQL docker container for multiple projects running on the same server.
Using docker-compose v3 files, I simply have the same mysql container configuration in each of the projects, and they have the same container_name
:
version: "3"
services:
app1:
image: foo
links:
- mysql
mysql:
image: mysql/mysql:5.7
container_name: shared_mysql
The second application has a similar docker-compose.yml
file, but with app2
instead of app1
.
When running docker-compose up --no-recreate
for app2
, I get an error:
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.
What can I do to share the MySQL container between multiple docker projects?
If your container is only created from other compose file you can use the external links feature in docker-compose.
If you want both docker compose files to be able to create the mysql container, I suggest you look into Share Compose configurations between files and projects. In this case, you can create a base file that only defines mysql and extend/merge it in both apps compose files.
We solve it by using a third project including all the shared services our micro-services are using like mysql, kafka and redis.
in each one of our docker-compose files, we added a external links to those services.
Its a little bit dirty but it working well.
You can follow this issue on github, https://github.com/docker/compose/issues/2075 that is talking about the same issue you struggling with.
You can simply avoid redefining the mysql in one of the two docker-compose.yml files and connect mysql and the other containers to the same network.
In order to do so, create a network:
Assign your network to your mysql container:
For any other container that has need to access mysql, just add the same network definition as above: