docker-compose: Sharing container between multiple

2019-02-12 00:13发布

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?

3条回答
冷血范
2楼-- · 2019-02-12 00:53

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.

查看更多
手持菜刀,她持情操
3楼-- · 2019-02-12 01:04

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.

查看更多
Ridiculous、
4楼-- · 2019-02-12 01:08

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:

docker network create shared

Assign your network to your mysql container:

version: '3'
services:
  mysql:
    ...
    networks:
    - shared
networks:
  shared: 
    external:
      name: shared

For any other container that has need to access mysql, just add the same network definition as above:

version: '3'
services:
  app1:
    ...
    networks:
    - shared
  app2:
    ...
    networks:
    - shared
  ...
networks:
  shared: 
    external:
      name: shared
查看更多
登录 后发表回答