docker-compose如何定义类似于docker run的容器作用域网络?

4

运行两个容器,其中mycontainer2必须使用与mycontainer1相同的网络堆栈,就好像这两个容器正在同一台机器上运行。下面是我尝试使用docker run--network container:xxx来实现此目的:

$ docker run -it --rm --name mycontainer1 -p 6666:7777 myregistry/my-container1:latest

$ docker run -it --rm --network container:mycontainer1 --name mycontainer2 myregistry/my-container2:latest

我尝试使用docker-compose复制此行为。但是docker-compose.yamlnetworks: definition没有指定相当于docker run--network container:xxx选项。在docker-compose中是否可以配置两个容器使用同一个网络堆栈?

2个回答

6

这是一个network_mode:设置。

version: '3.8'
services:
  mycontainer1:
    image: myregistry/my-container1:latest
    ports: ['6666:7777']
  mycontainer2:
    image: myregistry/my-container2:latest
    network_mode: service:mycontainer1     # <---

由于 Compose 通常会选择自己的容器名称,因此此 service:name 格式使用与命名的 Compose 服务匹配的容器。(如果覆盖了 container_name:,则也可以像使用 docker run 一样使用 container:mycontainer1。)


这个完美运行!非常感谢。顺便问一下,ports: ['6666:7777']ports: <newline> - '6666:7777'之间有什么区别? - undefined
1
请忽略这个。这只是在集合中以不同方式编写项目的一种方法。 - undefined

0
创建一个外部网络并在docker-compose YAML文件中使用它可能会有帮助。以下是操作步骤。
version: '3.7'
networks:
  default:
    external:
      name: an-external-network
services:
  my-container1:
   ...
  my-container2:
   ...

注意:在运行docker-compose up命令之前,请使用docker network create命令创建an-external-network

抱歉,这并不相同。在这里,两个容器共享相同的网络空间,但每个容器有不同的IP地址。我所寻找的是相同的网络堆栈,即一个单一的IP地址,也就是说,这两个服务可以通过localhost互相引用,就像它们在同一台机器上一样。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接