绑定到Windows上的docker socket

The*_*dus 41 docker

在*nix系统上,可以通过执行以下操作将docker socket从主机绑定到VM:

docker run -v /var/run/docker.sock:/var/run/docker.sock ...

在Windows主机上运行docker时是否有相同的方法来执行此操作?


我试过各种组合,比如:

docker run -v tcp://127.0.0.1:2376:/var/run/docker.sock ...

docker run -v "tcp://127.0.0.1:2376":/var/run/docker.sock ...

docker run -v localhost:2376:/var/run/docker.sock ...

这些都没有奏效.

Ale*_*nin 72

对于Docker for Windows,似乎有效: -v //var/run/docker.sock:/var/run/docker.sock

  • 上面的一些答案似乎并不是指在Docker for Windows上运行Windows容器.当我尝试运行标准命令时:`docker run -v /var/run/docker.sock:/ var/run/docker.sock`我收到以下错误:`docker:来自守护进程的错误响应:无效bind mount spec"//var/run/docker.sock:/var/run/docker.sock":无效的卷规范:'\\ var\run\docker.sock:\ var\run\docker.sock'`错误是有道理的,因为当我在Windows上,尝试运行Windows容器时,路径没有意义. (10认同)
  • 任何人都知道有一个"2018"解决方案(因为Windows上的Docker不再使用VM来运行Windows容器吗?) (4认同)
  • 经过2天的谷歌搜索,我终于找到了答案! (3认同)
  • @JoshWittner:您是否找到了使 Docker 套接字在带有 Windows 主机的 Windows 容器中可用的解决方案? (2认同)
  • 这确实有效,你现在知道原因了吗?有这方面的官方文档吗? (2认同)
  • 我相信这并不神奇,它只是在 Windows 上的 git bash 中进行路径扩展。在参数前使用 / 会禁用路径扩展。请参阅此处:/sf/ask/2425331401/ 我花了一段时间才弄清楚这一点,但由于这个答案,我节省了很多时间。谢谢大家!! (2认同)

Ali*_*ani 14

正如Docker文档所述:

如果您在Mac或Windows上使用Docker Machine,则您的Engine守护程序只能访问您的OS X或Windows文件系统.Docker Machine尝试自动共享您的/Users(OS X)或C:\Users(Windows)目录.因此,您可以使用以下命令在OS X上挂载文件或目录:

docker run -v /Users/<path>:/<container path> ...
Run Code Online (Sandbox Code Playgroud)

在Windows上,使用以下命令安装目录

docker run -v /c/Users/<path>:/<container path> ...
Run Code Online (Sandbox Code Playgroud)

所有其他路径都来自虚拟机的文件系统,因此如果要使其他主机文件夹可用于共享,则需要执行其他工作.对于VirtualBox,您需要将主机文件夹作为VirtualBox中的共享文件夹.然后,您可以使用Docker -v标志安装它.

尽管如此,您仍然可以使用:

docker run -v /var/run/docker.sock:/var/run/docker.sock ...
Run Code Online (Sandbox Code Playgroud)

第一个/var/run/docker.sock引用boot2docker虚拟机中的相同路径.

例如,当我在Windows机器中使用以下命令运行我自己的Jenkins图像时:

$ docker run -dP -v /var/run/docker.sock:/var/run/docker.sock alidehghanig/jenkins
Run Code Online (Sandbox Code Playgroud)

我仍然可以使用典型的docker命令与主机中的Docker守护进程通信.例如,当我docker ps在Jenkins容器中运行时,我可以看到在主机中运行容器:

CONTAINER ID   IMAGE  COMMAND   CREATED  STATUS  PORTS        NAMES
65311731f446   jen... "/bi.."   10...    Up 10.. 0.0.0.0:..  jenkins
Run Code Online (Sandbox Code Playgroud)


Sea*_*n W 8

只是为了在前面提供的答案上加分

使用 docker-compose 时,必须COMPOSE_CONVERT_WINDOWS_PATHS=1通过以下任一方式设置:

1).env在与项目的docker-compose.yml文件相同的位置创建一个文件

2) 在 CLI 中 set COMPOSE_CONVERT_WINDOWS_PATHS=1

在运行 docker-compose up 命令之前。

来源


Jos*_*ose 7

要绑定到 Windows 容器,您需要使用管道。

-v \\.\pipe\docker_engine:\\.\pipe\docker_engine
Run Code Online (Sandbox Code Playgroud)


Gab*_*lBB 6

即使它是一个 linux 容器,这在 Windows 10 上也对我不起作用:

-v /var/run/docker.sock:/var/run/docker.sock
Run Code Online (Sandbox Code Playgroud)

但这确实:

-v /usr/local/bin/docker:/usr/bin/docker
Run Code Online (Sandbox Code Playgroud)

我打开的这个问题的解决方案:https : //github.com/docker/for-win/issues/4642


小智 5

它适合我的Windows 10是:

 -v "\\.\pipe\docker_engine:\\.\pipe\docker_engine"
Run Code Online (Sandbox Code Playgroud)

请记住,我正在尝试访问我经常推荐的 portainer,这是一个很棒的应用程序。为此,我使用这个命令:

docker run -d -p 9000:9000 -v "\\.\pipe\docker_engine:\\.\pipe\docker_engine" portainer/portainer 
Run Code Online (Sandbox Code Playgroud)

然后只需转到:

http://localhost:9000/
Run Code Online (Sandbox Code Playgroud)