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.yaml
的 networks: 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
。)
运行 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.yaml
的 networks: 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 createan-external-network
before runningdocker-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
。)