如何在Docker Compose中使用主机网络和任何其他用户定义的网络?
我想将Docker Compose文件中定义的两个Docker容器相互连接(如何在Docker Compose中使用主机网络和任何其他用户定义的网络?,docker,networking,service,docker-compose,ethernet,Docker,Networking,Service,Docker Compose,Ethernet,我想将Docker Compose文件中定义的两个Docker容器相互连接(app和db)。其中一个(app)也应该连接到主机网络 容器应连接到通用用户定义网络(appnet或default),以使用docker networking的嵌入式DNS功能 app还需要直接连接到主机网络,以便在docker主机的物理网络中接收以太网广播(网络层2) 如果我在compose中同时使用两个指令network\u mode:host和networks,我会得到以下错误 错误:“网络模式”和“网络”无法组合
app
和db
)。其中一个(app
)也应该连接到主机
网络
容器应连接到通用用户定义网络(appnet
或default
),以使用docker networking的嵌入式DNS功能
app
还需要直接连接到主机网络,以便在docker主机的物理网络中接收以太网广播(网络层2)
如果我在compose中同时使用两个指令network\u mode:host
和networks
,我会得到以下错误
错误:“网络模式”和“网络”无法组合
所以我只能用网络来做这件事
version: "3.3"
services:
app:
build: .
image: app
container_name: app
environment:
- MONGODB_HOST=db
depends_on:
- db
networks:
- appnet
- hostnet
db:
image: mongo:latest
container_name: db
networks:
- appnet
networks:
appnet:
hostnet:
external:
name: host
前面的合成文件产生错误。
错误:对于应用程序网络范围的别名,仅支持用户定义网络中的容器
如果我在服务中使用网络名host
,而没有在网络中定义它(因为它已经存在),它会说。
错误:服务“应用程序”使用未定义的网络“主机”
如何在Docker Compose中同时使用主机
网络和任何其他用户定义的网络(或默认网络)
我正在使用Docker版本17.11.0-ce-rc3,构建5b4af4f
和Docker compose版本1.17.1,构建6d101fb
来使用主机网络,您不需要定义它。只需使用“ports”关键字定义要在主机网络中公开的服务端口。TL;博士,你不能。主机网络关闭该容器的docker网络命名空间。你不能同时打开和关闭它
相反,请使用发布的端口或unix套接字连接到数据库,您可以将其作为卷共享。例如,以下是如何发布端口:
version: "3.3"
services:
app:
build: .
image: app
container_name: app
environment:
- MONGODB_HOST=127.0.0.1
db:
image: mongo:latest
container_name: db
ports:
- 127.0.0.1:27017:27017
由于Docker 18.03+可以使用host.Docker.internal
从容器中访问主机。无需添加主机
网络或将其与用户定义的网络混合使用
来源:应用程序
需要OSI第2层访问主机网络。我没有要求UDP/TCP端口绑定。对不起,我的错。我确实在最新的docker for windows上复制了它-同一期。moby github上也有类似的问题——似乎这是一个更大问题的一部分是的,我认为使用docker compose和主机网络的多容器应用程序的唯一方法是,对compose文件中的所有容器使用主机网络。至少在2018年1月的Docker Compose的当前版本中。这个答案在某种程度上帮助了我,我从必须使用它的容器中移除了网桥网络,用于此容器的ports
指令以及与其他容器相关的内部网络,也用于那些其他容器的expose
——它在Windows和macOS上的工作非常出色,在Linux上这取决于这是一个非常好的答案,并且主要被忽略了。发布的端口提供了这两个方面的最佳效果,在本地主机上具有可观察性,并且在私有网络中,容器服务可以通过容器名称相互解析。不幸的是,您无法将数据包从主机操作系统路由到Docker for Mac,但您可以使用已发布的端口将容器彼此连接到主机操作系统。