【问题标题】:container not able to access host service if "network_mode: host" used如果使用“network_mode:host”,容器无法访问主机服务
【发布时间】:2020-10-28 17:38:08
【问题描述】:

我在 docker-compose.yml 中定义了 2 个容器。 容器 1 通过 HTTP 请求与在主机上运行的服务进行通信。 容器 2 需要访问互联网,因此设置了 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 到主机服务的HTTP 请求因超时而失败。 route 命令只有 eth0 和 eth1 的条目。 如果没有 network_mode,请求会通过,但 container2 会失去与 Internet 的连接。

network_mode 在这里使用正确吗?如果没有,有人可以告诉如何解决这个问题。

【问题讨论】:

    标签: docker networking docker-compose docker-container


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-08
      • 1970-01-01
      • 2016-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      相关资源
      最近更新 更多