我想将Docker-Compose文件中定义的两个Docker容器相互连接(app
和db
)。其中一个(app
)也应该连接到host
网络。
容器应连接到通用的用户定义网络(appnet
或default
),以使用docker网络中的嵌入式DNS 功能。
app
还需要直接连接到主机网络,以接收docker主机物理网络中的以太网广播(网络层2)。
如果我同时使用指令network_mode: host
和networks
,我会收到以下错误。
ERROR: 'network_mode' and 'networks' cannot be combined
所以我必须只使用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
上述撰写文件会产生错误。
ERROR: for app network-scoped alias is supported only for containers in user defined networks
如果我在服务中使用网络名称host
而没有在网络中定义它(因为它已经存在),它说。
ERROR: Service "app" uses an undefined network "host"
如何在Docker-Compose中一起使用host
网络和任何其他用户定义的网络(或默认网络)?
我正在使用Docker version 17.11.0-ce-rc3, build 5b4af4f
和docker-compose version 1.17.1, build 6d101fb
答案 0 :(得分:1)
要使用主机网络,您无需定义它。只需使用“ports”关键字来定义要在主机网络中公开的服务的端口。
答案 1 :(得分:0)
TL; DR不能。主机网络将关闭该容器的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
答案 2 :(得分:-1)
自Docker 18.03+起,您可以使用host.docker.internal
从您的容器中访问您的主机。无需添加host
网络或将其与用户定义的网络混合。
来源:Docker Tip #65: Get Your Docker Host's IP Address from in a Container