带有 docker-compose 的 Docker 容器主机名

标签 docker docker-compose

我有多个服务运行每个 mysql数据库。
我正在使用 docker-compose在 docker 中部署我的应用程序。
我需要所有这些服务都在同一个网络中。
我为每个服务使用不同的 docker-compose 文件。

我的问题是:
如果容器在不同的撰写文件中具有相同的名称,我如何防止它们被命名为相同的(在 docker dns 中)。

例子:

service1.yml

version: '2'
services:
  mysql:
    image: "mysql"
    network:
      - anetwork
[...]

service2.yml
version: '2'
services:
  mysql:
    image: "mysql"
    network:
      - anetwork
[...]

这两个文件位于不同的文件夹中。启动所有 docker-compose up 后。容器显示为 docker ps .在命名 service1_mysql_1和另一个 service2_mysql_1 .
但是当我 ping mysql网络内的dns名称anetwork , 双方回应...

我应该如何解决这个问题?我正在使用不良做法?

我已经尝试过:
- 更改每个撰写文件中的名称

最佳答案

我认为选项是:

  • 在每个撰写文件中将名称更改为不同,我知道您已经尝试过,例如:
    version: '2'
    services:
      mysql1:
        image: "mysql"
    [...]
    
  • 连接到每个容器时使用完全限定名称,即 service1_mysql_1service2_mysql_1在这种情况下。不理想,因为它是生成的,但可以通过使用 container_name 显式设置它来修复此名称。选项:
    version: '2'
    services:
      mysql:
        image: "mysql"
        container_name: my-service1-mysql
    [...]
    

    然后在anetwork上有一个需要连接这个数据库的容器可以使用主机名连接 my-service1-mysql
  • 关于带有 docker-compose 的 Docker 容器主机名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49591334/

    相关文章:

    image - 使 Docker 镜像相互通信

    docker 撰写 : Change volume mapping from a docker volume to a folder on the server

    mysql - RUN mkdir/code 和 ADD ./code/是什么意思

    docker 容器 : changing network kernel settings, net.core.rmem_max

    r - docker-compose 的行为不符合 dockerfiles

    reactjs - Kubernetes 中的 Dockerfile 入口点未执行

    docker-compose up 通过 Windows bat 文件?

    docker - 如何将文件复制到 Docker 卷并将该卷与 docker-compose 一起使用

    spring - SpringBoot-微服务的Docker化+ Angular + MySQL + RabbitMQ

    docker - 如何在 github actions 中连接到 docker 容器?