如何在Docker Compose中实现共享其他容器的网络栈?
问题描述
用户已知可通过命令 docker run -it --net=container:<容器名> <镜像名> bash 让容器共享其他容器的网络栈,现在需要在以下Docker Compose配置中实现让attachedclient容器共享client容器的网络栈,询问应修改配置中<???>处或其他位置的内容:
version: "3.8" services: client: image: ubuntu networks: - mynet attachedclient: image: ubuntu networks: - <???> networks: mynet:
解决方案
你不需要修改<???>处的内容,而是要删除attachedclient的networks配置块,换成network_mode字段来指定共享目标服务的网络栈。具体修改如下:
修改后的完整配置:
version: "3.8" services: client: image: ubuntu networks: - mynet attachedclient: image: ubuntu network_mode: service:client networks: mynet:
说明
network_mode: service:client是Docker Compose中对应docker run --net=container:<容器名>的写法,它会让attachedclient容器直接复用client服务的网络命名空间,两者共享IP地址、端口、网络接口等所有网络资源。- 使用该配置后,
attachedclient自身的networks配置会被忽略,因为它已经完全复用了client的网络栈。 - 如果需要精准指定某个具体容器(而非服务),也可以写成
network_mode: container:<容器ID或容器名>,但在Compose场景下,用服务名service:client更可靠,Compose会自动关联到对应服务的容器。
内容的提问来源于stack exchange,提问作者eskaes
相关产品推荐
相关产品推荐

