当前位置: 首页 > 知识库问答 >
问题:

docker-compose:使用相同的container_name在多个项目之间共享容器

赫连鸿振
2023-03-14

我想将MySQL泊坞站容器用于在同一台服务器上运行的多个项目。

使用docker-compose v3文件,我只是在每个项目中具有相同的mysql容器配置,并且它们具有相同的container_name

version: "3"

services:
  app1:
    image: foo
    links:
      - mysql

  mysql:
    image: mysql/mysql:5.7
    container_name: shared_mysql

第二个应用程序有一个类似的< code>docker-compose.yml文件,但是使用了< code>app2而不是< code>app1。

当运行 docker 撰写时 --不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容器?

共有3个答案

司寇阳曦
2023-03-14

我们通过使用第三个项目来解决它,包括我们的微服务正在使用的所有共享服务,如mysql,kafka和redis。

在每个docker组合文件中,我们都添加了指向这些服务的外部链接。

它有点脏,但它工作得很好。

你可以在https://github.com/docker/compose/issues/2075的github上关注这个问题,它正在讨论你正在努力解决的同样的问题。

慎风畔
2023-03-14

如果您的容器仅从其他compose文件创建,您可以使用docker-compose中的外部链接功能。

如果您希望两个docker compose文件都能够创建mysql容器,我建议您查看文件和项目之间的Share Compose配置。在这种情况下,您可以创建一个仅定义mysql的基本文件,并在两个应用程序compose文件中扩展/合并它。

漆雕奇逸
2023-03-14

您可以简单地避免在两个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
 类似资料:
  • 问题内容: 我正在使用docker-compose和v3。我正在尝试在Docker中挂载卷: 我想将此作为卷,然后从多个容器中引用该卷。的卷配置参考仅示出了作为命名体积,用没有值,因此它不会像以上。 这给了我: 错误:在文件“ ./docker-compose.yml”中,卷“ app-volume”必须是映射而不是字符串。 显然,我知道我需要更改键/值对,但是我不确定 如何 更改它,以便可以在服

  • 我想把它作为一个卷,然后从多个容器中引用该卷。卷配置引用只将显示为命名卷,没有值,因此看起来不像上面那样。 这给了我: 错误:在文件“./docker-compose.yml”中,卷“app-volume”必须是映射,而不是字符串。 显然,我知道我需要更改键/值对,但我不确定如何更改它,以便在服务之间共享卷。 我还签出了,但这实际上只允许从其他容器继承。我看到有人在另一个包含他们想要的映射的容器上

  • 问题内容: 我在两个不同的文件夹中有两个单独的文件: 如何确保in中的容器可以将请求发送到in中的容器? 我知道可以为单个容器设置选项,以便可以为该容器分配特定的IP地址,但是使用时似乎没有此选项。 目前,我最终做了一个,然后查看输出中的网关。它可以工作,但问题是该IP是随机分配的,因此我不能依靠它。 因此,此问题的另一种形式可能是: 我可以使用docker-compose将固定IP地址分配给特定

  • 如何确保中的容器可以将请求发送到中的容器? 我知道可以使用为单个容器设置选项,以便为该容器分配特定的IP地址,但使用时似乎该选项不可用。 目前,我将执行一个并查看输出中的网关。它起作用但问题是这个IP是随机归属的,所以我不能依赖它。 因此,这一问题的另一种形式可能是: 可以使用Docker-Compose将固定IP地址归属于特定容器吗? 两个不同的docker-compose项目如何相互通信?

  • 问题内容: 嗨,我正在使用Docker部署一些服务,在这里我想在不同的Docker容器之间共享Docker卷。 假设我有一个Docker容器A在/ data挂载了一个卷。这是A的Dockerfile 据我了解,这会将一个卷附加到容器,但不会将主机目录装载到该容器。因此,该卷内的数据仍位于容器A内。 我有另一个提供ftp服务的容器B。它访问卷/ public下的数据。B的Dockerfile是 现在

  • 我正在使用Docker部署一些服务,我想在不同的容器之间共享Docker卷。 假设我有一个Docker容器a,它在/data处挂载了一个卷。下面是它的DockerFile: 根据我的理解,这会将卷附加到容器,但不会将主机目录挂载到容器。所以这个卷里面的数据仍然在容器A里面。