我在docker-compose.yml中定义了2个容器。 容器1通过HTTP请求与主机上运行的服务进行通信。 容器2需要访问Internet,因此设置了network_mode:host,以便它可以访问主机接口(eth0和eth1)。
docker-compose.yml如下:
version: "3"
services:
container1:
image: Image1
environment:
- SYSTEMAPI_URI
cap_add:
- SYS_TTY_CONFIG
devices:
- "/dev/tty1:/dev/tty1"
- "/dev/tty2:/dev/tty2"
volumes:
- /var/lib/docker/volumes/<>
container2:
image: Image2
environment:
- SYSTEMAPI_URI
- STORAGE_FOLDER=/mnt
- CERTIFICATE_PATH=/mnt/cert
- STORAGE_HOST=/var/lib/docker/volumes/<>
- EXTRA_CONFIG=${DOLLAR}SYSTEMAPI_VAR_DNSMASQ_EXTRA_CONFIG
volumes:
- /var/lib/docker/volumes/<>
privileged: true
network_mode: "host"
在network_mode设置为host的情况下,从container1到host服务的HTTP请求因超时而失败。 route命令仅具有eth0和eth1的条目。 如果没有network_mode,则请求会通过,但是container2会断开与Internet的连接。
network_mode是否在这里使用了正确的方法?如果没有,可以告诉别人如何解决。
答案 0 :(得分:0)
访问主机上运行的服务的正确方法是添加extra_hosts
(这里是官方的reference)。您也不需要特权模式(通常最好避免这种情况)。
使用extra_hosts,可以将容器正在查找的名称映射到主机的IP。