我想在同一台服务器上运行多个项目使用MySQL docker容器。
使用docker-compose v3文件,我只是在每个项目中都有相同的mysql容器配置,并且它们具有相同的container_name
:
version: "3"
services:
app1:
image: foo
links:
- mysql
mysql:
image: mysql/mysql:5.7
container_name: shared_mysql
第二个应用程序有一个类似的docker-compose.yml
文件,但app2
代替app1
。
为docker-compose up --no-recreate
运行app2
时,出现错误:
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.
如何在多个docker项目之间共享MySQL容器?
答案 0 :(得分:13)
您可以简单地避免在两个docker-compose.yml文件之一中重新定义mysql,并将mysql和其他容器连接到同一网络。
为此,请创建一个网络:
docker network create shared
将您的网络分配到您的mysql容器:
version: '3'
services:
mysql:
...
networks:
- shared
networks:
shared:
external:
name: shared
对于需要访问mysql的任何其他容器,只需添加与上面相同的网络定义:
version: '3'
services:
app1:
...
networks:
- shared
app2:
...
networks:
- shared
...
networks:
shared:
external:
name: shared
答案 1 :(得分:5)
如果您的容器仅使用其他撰写文件创建,则可以使用docker-compose中的external links功能。
如果您希望两个docker compose文件都能够创建mysql容器,我建议您查看Share Compose configurations between files and projects。在这种情况下,您可以创建一个仅定义mysql的基本文件,并在两个应用程序撰写文件中扩展/合并它。
答案 2 :(得分:2)
我们通过使用第三个项目解决它,包括我们的微服务使用的所有共享服务,如mysql,kafka和redis。
在我们的每个docker-compose文件中,我们添加了一些指向这些服务的外部链接。
它有点脏,但效果很好。
您可以在github上关注此问题,https://github.com/docker/compose/issues/2075 这是在谈论你正在努力解决的同一个问题。