在Windows 10上运行docker时,我在安装本地卷时遇到问题。仅在启用我的公司VPN时出现问题。
C:\Users\matt> docker run --rm -v d:/tmp:/data alpine ls /data
my_local_test_file.txt
连接到VPN后,我得到了:
C:\Users\matt> docker run --rm -v d:/tmp:/data alpine ls /data
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: error while creating mount source path '/host_mnt/d/tmp': mkdir /host_mnt/d: file exists.
Docker版本为17.12.0-ce-win47
我相信问题在于docker在安装本地卷时会使用网络,并且VPN通过VPN网关路由所有网络流量,因此docker无法看到本地驱动器。
是否有解决方法?
我知道我可以在Linux VM中运行docker,或使用docker toolbox。这些都不是特别好。
还有其他可能的解决方法吗?
答案 0 :(得分:2)
VPN通过VPN网关路由所有网络流量
您可能是对的,在这种情况下,从Docker客户端路由到Docker守护程序的所有流量也将通过VPN。在Windows上使用Docker CLI时,它将连接到可通过网络访问的Docker守护程序。使用VPN可能会破坏此机制。
我认为正在发生的事情是
127.0.0.1
或通过-H
flag or DOCKER_HOST
env variable设置)。这意味着该IP或主机以某种方式存在于您的VPN网络上,并且有一个Docker守护进程在监听它(诚然,这有点奇怪,使用该守护程序可能会有风险)如果确实发生了这种情况,那么肯定会看到docker ps -a
,docker images
等的不同输出,因为您正在连接到不同的守护程序。 (可通过您的VPN访问的守护程序实际上是其他人所有的,最好不要使用它!)
您可以做什么:
请勿通过您的VPN路由127.0.0.1(或配置为Docker主机的任何主机)
要采取的措施取决于您使用的VPN软件,或者您可以直接在Windows计算机上添加路由(主题为here is a good article)
在启用VPN时查找您的IP,并将Daemon配置为侦听此IP
ipconfig /all
并找到VPN使用的接口及其IP地址,例如10.142.0.12
(您可以在启用VPN之前/之后比较输出,以识别VPN是哪个)是)%programdata%\docker\config\daemon.json
上,您都需要指定"hosts": ["10.142.0.12", "127.0.0.1"]
例如(see docs for details)10.142.0.12
或与客户端DOCKER_HOST=10.142.0.12
将Docker主机配置为docker -H 10.142.0.12 <cmd>
/!\安全说明:这可能会带来安全问题,因为任何知道您VPN网络上IP的人都可以使用您计算机上的守护程序
希望这会有所帮助。我不是Windows专家,所以我无法提供Windows相关问题的详细信息,但如有需要,可以随时询问详细信息。