如果使用“ network_mode:主机”,则容器将无法访问主机服务

时间:2020-07-08 10:21:26

标签: docker networking docker-compose docker-container

我在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是否在这里使用了正确的方法?如果没有,可以告诉别人如何解决。

1 个答案:

答案 0 :(得分:0)

访问主机上运行的服务的正确方法是添加extra_hosts(这里是官方的reference)。您也不需要特权模式(通常最好避免这种情况)。

使用extra_hosts,可以将容器正在查找的名称映射到主机的IP。