docker-compose 如何像 docker 运行 那样定义容器范围的网络?

docker-compose how to define container scoped network like in docker run?

运行 2 个容器,其中 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 是否可以配置两个容器使用相同的网络堆栈?

创建外部网络并在内部使用它 docker-编写 YAML 清单可能会有所帮助。这是您的操作方法。

version: '3.7'
networks:
  default:
    external:
      name: an-external-network
services:
  my-container1:
   ...
  my-container2:
   ...

Note: use docker network create command to create an-external-network before running docker-compose up command.

这是一个 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。)