Docker-机器在连接到 Cisco AnyConnect 时无法工作 (Mac OS X)

Docker-machine doesn't work when connected to Cisco AnyConnect (Mac OS X)

我正在尝试找到一些方法来同时使用我公司的 VPN 和 Docker-Machine;目前,我不能同时使用两者,否则如果我在任何时候使用 VPN,那么在我关闭 VPN 并重新启动我的机器之前我无法做任何 Docker 相关的事情。具体来说,以下命令会挂起并超时:

eval $(docker-machine env dev)

其中 dev 是我的 Docker-Machine VM 的名称。

如果没有 eval 命令,涉及 Docker 的任何内容都无法正常工作,并且 eval 命令在连接到 VPN 时甚至之后都无法正常工作。我读过使用旧版本的 VirtualBox(4.3.1 或类似版本)可以解决此问题,但不幸的是,Docker Toolbox 始终确保安装了最新的 VirtualBox。我正在使用 Docker 工具箱 1.8.1b 和 VirtualBox 5.0.2。有没有办法让 Cisco AnyConnect VPN 和 Docker-Machine 一起工作?似乎主要问题是 AnyConnect 干扰了网络路由。

我相信聪明的 bash 人可以解释原因,但是 eval "$(docker-machine env dev)"(注意引号)是推荐的(Docker)设置 [=11] 的方法=] 环境变量。

此答案应用了以下发现:

我在 Mac OS X (Docker v1.10) 上使用工具箱,来自:https://docs.docker.com/mac/step_one/

问题似乎是启动 Cisco AnyConnect 时引入的防火墙规则。下面显示了引入的问题以及如何解决它:

  1. 确保 Cisco AnyConnect 已停止 (!)
  2. 确保您看不到防火墙规则问题;验证,运行(使用 Docker 快速启动终端中的工具箱):
    • $ sudo ipfw -a list | grep "deny ip"
  3. 创建名为 docker 的机器,例如:dev、运行:
    • $ docker-machine create --driver virtualbox dev
  4. 验证可以访问机器,运行例如:
    • $ docker-machine ls
  5. 启动 Cisco AnyConnect:--- 此处介绍问题 ---
  6. 验证无法再访问机器,运行:
    • $ docker-machine ls
  7. 您将看到如下错误:
    • Unable to query docker version [...] connect: permission denied
  8. 检查引入的新防火墙规则,运行:
    • $ sudo ipfw -a list | grep "deny ip"
  9. 你会得到类似这样的东西:
    • 00411 72 6160 deny ip from any to any keep-state
  10. 根据第一个数字(在本例中为:00411),删除规则,运行 例如:
    • $ sudo ipfw delete 00411
  11. 验证机器可以再次访问,运行:
    • $ docker-machine ls
  12. 现在您可以再次成功地执行以下操作:
    • $ eval $(docker-machine env dev)
    • $ docker ps