您是否嘗試運行Windows Windows主機上的容器(而不是Windows主機上的Linux容器通過Moby VM)? 在這種情況下,您不能共享命名管道(npipe:////./pipe/docker_engine)作爲泊塢窗卷。
似乎唯一的選擇是使用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,只需用計算機名。這意味着當啓動嵌套容器時需要更多的網絡流量,因爲它需要訪問DNS以將其解析爲通常爲主機的主IP地址的IP地址,而不是docker NAT網關IP。由於Docker守護進程將監聽主機的外部IP,因此它的安全性會降低,因此可以從外部訪問。
然後就可以開始一個容器,只是傳遞的環境變量DOCKER_HOST:
docker run -it -e DOCKER_HOST ...
以上估計是基於:https://docs.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/deploy-containers-on-nano#manage-docker-on-nano-server
可能沒有辦法做Windows上。 Unix以將文件句柄表示爲大多數而衆所周知,但是Windows可能不會。 – dnephin