【问题标题】:How to make docker container to use host network?如何让 docker 容器使用主机网络?
【发布时间】:2019-08-27 05:06:15
【问题描述】:

我正在为 mac 运行 docker。我的 docker compose 配置文件是:

version: "2.3"
services:
  base:
    build:
      context: .

  dev:
    network_mode: "host"
    extends:
      service: base

当容器通过docker-compose run --rm dev sh 启动时,它无法ping 通IP 地址(172.25.36.32)。但我可以从主机 ping 这个地址。我在配置文件中设置了network_mode: "host"。如何让 docker 容器共享主机网络?

我发现host 网络不适用于 Mac。在 Mac 中有解决方案吗?

下面是docker network inspect ID 的输出:

[
    {
        "Name": "my_container_default",
        "Id": "0441cf2b99b692d2047ded88d29a470e2622a1669a7bfce96804b50d609dc3b0",
        "Created": "2019-08-27T06:06:30.984427063Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "22d3e7500ccfdc7fcd192a9f5977ef32e086e340908b1c0ff007e4144cc91f2e": {
                "Name": "time-series-api_dev_run_b35174fdf692",
                "EndpointID": "23924b4f68570bc99e01768db53a083533092208a3c8c92b20152c7d2fefe8ce",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "default",
            "com.docker.compose.project": "time-series-api",
            "com.docker.compose.version": "1.24.1"
        }
    }
]

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    我相信您需要在build 期间添加network 选项。试试

    version: "2.3"
    services:
      base:
        build:
          context: .
          network: host
      dev:
        network_mode: "host"
        extends:
          service: base
    

    编辑:适用于 Linux,请参阅Mac 的文档

    主机网络驱动程序仅适用于 Linux 主机,不支持 Docker Desktop for Mac、Docker Desktop for Windows 或 Docker EE for Windows Server。

    【讨论】:

    • 我已经尝试过了,但它似乎不起作用。主机无法在 Mac 上运行。
    • 是的,我知道它不适用于 mac。我想知道 Mac 有什么解决方案可以解决这个问题吗?
    • 我无法从 docker 容器 ping 通 IP 地址。
    • 即使使用bridge 也无法ping 通?检查这个问题github.com/docker/for-mac/issues/2345
    【解决方案2】:

    我认为您需要使用up 选项而不是run 启动container,因为运行会覆盖许多选项:

    docker-compose up dev
    

    或者你可以试试--use-aliasesrun

    --use-aliases 在网络中使用服务的网络别名 容器连接到。

    this

    附言 更新后

    以下内容适用于MAC

    dev:
    
      network: host
      extends:
        service: base
    

    【讨论】:

      猜你喜欢
      • 2020-07-17
      • 2016-02-27
      • 2021-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-25
      • 1970-01-01
      • 2017-11-11
      相关资源
      最近更新 更多