我有一个利用docker客户端连接到docker守护程序的应用程序。我从容器内部运行此应用程序。为此,我在Ubuntu和MacOS上使用以下命令运行我的容器:
docker run -d -v /var/run/docker.sock:/var/run/docker.sock someimage
最近,在我的Windows机器上,我安装了Docker for Windows并且没有
/var/run/docker.sock
文件。我无法弄清楚Windows上docker.sock
文件的等效内容。
更新:我在[docker's repository]上找到了相当于docker.sock
的{{1}}(https://github.com/docker/docker/search?utf8=%E2%9C%93&q=DefaultDockerHost
)但我仍然不知道如何使用以下方式映射音量:
npipe:////./pipe/docker_engine** path
答案 0 :(得分:2)
您是否正在尝试在Windows主机上运行 Windows 容器(而不是通过Moby VM在Windows主机上运行Linux容器)? 在这种情况下,您无法将命名管道(npipe:////./pipe/docker_engine)共享为docker volume。
似乎唯一的选择是使用 TCP 套接字。 以下是我在PowerShell中的完成方式:
# Open firewall
# TODO: allow access only from internal nat-ed containers
netsh advfirewall firewall add rule name="Docker daemon " dir=in action=allow protocol=TCP localport=2375
# Find gateway ip address for internal docker nat network, set DOCKER_HOST based on it
$gatewayIpAddress = (docker network inspect nat | ConvertFrom-Json).IPAM.Config[0].Gateway
$dockerHost = "tcp://${gatewayIpAddress}:2375"
$Env:DOCKER_HOST = $dockerHost
[Environment]::SetEnvironmentVariable("DOCKER_HOST", $dockerHost, "Machine")
# Reconfigure docker daemon to use TCP
'{ "hosts": ["' + $dockerHost + '"] }' | Set-Content 'C:\ProgramData\docker\config\daemon.json'
Restart-Service docker
# Smoke Test
docker version
您可以使用更简单的方法而不是找到上面的网关IP,只需使用COMPUTERNAME即可。这将意味着在启动嵌套容器时会有更多的网络流量,因为它需要访问DNS以将其解析为IP地址,该IP地址通常是主机的主IP地址,而不是docker nat网关IP。此外,由于Docker守护程序将侦听主机的外部IP,因此安全性会降低,因此可以从外部访问。
然后你可以启动一个容器并只传递env var DOCKER_HOST:
docker run -it -e DOCKER_HOST ...
答案 1 :(得分:0)
第一个/var/run/docker.sock引用boot2docker虚拟机中的相同路径。 Correcly写/var/run/docker.sock