Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 10上的docker.sock等价物是什么?_Docker_Docker Compose - Fatal编程技术网

Windows 10上的docker.sock等价物是什么?

Windows 10上的docker.sock等价物是什么?,docker,docker-compose,Docker,Docker Compose,我有一个应用程序,它利用docker客户端连接到docker守护进程。我从一个容器中运行这个应用程序。为此,我在Ubuntu和MacOS上使用以下命令运行我的容器: docker run -d -v /var/run/docker.sock:/var/run/docker.sock someimage 最近,我在我的Windows计算机上安装了,并且没有 /var/run/docker.sock 文件。我无法找出Windows上的docker.sock文件的等效项 更新:我在[docker'

我有一个应用程序,它利用docker客户端连接到docker守护进程。我从一个容器中运行这个应用程序。为此,我在Ubuntu和MacOS上使用以下命令运行我的容器:

docker run -d -v /var/run/docker.sock:/var/run/docker.sock someimage
最近,我在我的Windows计算机上安装了,并且没有

/var/run/docker.sock
文件。我无法找出Windows上的
docker.sock
文件的等效项

更新:我在[docker's repository]上的Windows上找到了一个相当于
docker.sock
( )但我仍然不知道如何使用以下方法映射卷:

npipe:////./pipe/docker_engine** path

第一个/var/run/docker.sock引用boot2docker虚拟机中的同一路径。正确写入/var/run/docker.sock

您是否试图在Windows主机上运行Windows容器(而不是通过Moby VM在Windows主机上运行Linux容器)? 在这种情况下,您不能共享命名管道(npipe:////./pipe/docker_engine)作为docker卷

似乎唯一的选择是使用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 ... 

以上是基于:

在windows上可能没有这样做的方法。Unix以将大多数事物表示为文件句柄而闻名,但windows可能不是。这才是真正的答案。谢谢!