【问题标题】:Docker container and host network VPNDocker 容器和主机网络 VPN
【发布时间】:2016-02-27 13:01:48
【问题描述】:

我正在尝试在启用 VPN(TUN 设备)的 MacOS 上运行 docker 映像。 Docker 容器可以访问互联网,但无法访问 vpn 后面的资源。让Docker进入VPN网络的正确方法是什么?

我试过了 docker run --net host 使 docker 共享主机网络,它没有帮助。 Host 可以访问 VPN 资源,docker 容器无法解析它们的名字..

【问题讨论】:

  • 我最近构建了一个 VPN 容器,需要--privileged,在我的情况下不需要--net host
  • 对于任何 ubuntu 用户:在使用 NetworkManager 处理 VPN 连接的 Ubuntu 上,--net host 足以共享 VPN 连接。 @schmunk 由于--privileged 打开所有功能,因此在安全性方面是一个巨大的缺陷,您应该尝试仅识别关键功能(NET_ADMIN?)并仅启用此功能。进一步阅读:Docker Documentation - Engine - Runtime privilege and Linux capabilities
  • @Murmel 您应该将此评论发布为 ubuntu 用户的答案,这对我来说是解决方案(ubuntu 18.04)。
  • 这里提到的解决方案对我有用:stackoverflow.com/a/52885161/294552

标签: networking docker vpn


【解决方案1】:

在 Mac 上运行的 docker 版本 3.6.0 (67351) 上遇到此问题

对我有用的是结合@Sheridan Rea 和@Marco 发布的解决方案

  1. 将 Docker 子网更改为 192.168.65.0/28。之前设置为 192.168.63.0/24。点击应用 & 重启/重启 Docker

  2. 运行docker network prune

  3. 运行docker compose up

简单地更改 Docker 子网对我不起作用

现在我可以 ping VPN 后面的 IP 地址

【讨论】:

    【解决方案2】:

    我遇到了这个确切的问题。我尝试了这里建议的其他解决方案,但它们对我不起作用。经过大量试验和错误后,这个解决方案效果很好:

    在 daemon.json 配置文件中添加 "bip": "192.168.1.5/24"。该文件可以在 docker 引擎下的 docker 桌面设置或 /etc/docker/daemon.json 中找到。 BIP 是网桥 IP 地址的设置,将更改 docker 在其子网中分配的 IP。通过更改此设置,我避免了 VPN 和 docker ip 地址之间的冲突。

    重启 docker 守护进程。

    停止所有容器。

    运行“docker network prune”删除未使用的网络。

    重新启动所有容器。这将使用新的 IP 地址重新创建他们的网络。

    以后连接VPN后可能还需要重启docker。有关其他解决方案和想法,请参阅此线程:https://github.com/docker/for-mac/issues/2820

    【讨论】:

      【解决方案3】:

      对我有用的是将 docker 子网掩码从 /24 更改为 /28,然后重新启动,我现在可以在我的 vpn 网络上执行 ping、telnet 和其他操作。它说默认是 /28 但 docker desktop 附带 /24 。可能是笔误,我不知道。

      【讨论】:

        【解决方案4】:

        将主机连接到 VPN 后,我必须重新启动 docker。

        sudo systemctl restart docker docker start {name-of-container}

        【讨论】:

        • 这是正确的解决方案。
        【解决方案5】:

        不确定这是否是最佳解决方案。

        连接到 VPN 后,我使用了主机上出现的 DNS

        scutil --dns | grep 'nameserver\[[0-9]*\]'
        nameserver[0] : xxx.xxx.xxx.xxx
        

        修改后的docker运行命令:

        docker run --cidfile="docker.pid" --dns=xxx.xxx.xxx.xxx --publish-all
        

        现在 docker 容器可以访问 VPN 后面的资源了……可以了,但是我不知道是好是坏……

        【讨论】:

          【解决方案6】:

          遇到了类似的问题。 OP 的解决方案有效,但简单地重新启动我的 docker vm 也是如此:

          docker-machine restart $host
          

          灵感:https://www.reddit.com/r/docker/comments/39z4xd/when_my_docker_host_is_connected_to_vpn_i_can_no/

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-08-25
            • 2020-07-07
            • 2020-07-17
            • 2020-07-08
            • 1970-01-01
            • 1970-01-01
            • 2018-02-17
            • 1970-01-01
            相关资源
            最近更新 更多