绑定到Windows上的docker socket

时间:2016-04-21 09:18:23

标签: 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 ...

这些都没有奏效。

8 个答案:

答案 0 :(得分:61)

对于适用于Windows的Docker似乎正在运行:-v //var/run/docker.sock:/var/run/docker.sock

答案 1 :(得分:13)

作为Docker documentation states

  

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

docker run -v /Users/<path>:/<container path> ...
  

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

docker run -v /c/Users/<path>:/<container path> ...
  

所有其他路径都来自虚拟机的文件系统,所以如果你   想要让其他主机文件夹可供共享,你需要   做额外的工作。在VirtualBox的情况下,你需要制作   主机文件夹可用作VirtualBox中的共享文件夹。然后你可以   使用Docker -v标志挂载它。

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

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

第一个/var/run/docker.sock指的是boot2docker虚拟机中的相同路径。

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

$ docker run -dP -v /var/run/docker.sock:/var/run/docker.sock alidehghanig/jenkins

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

CONTAINER ID   IMAGE  COMMAND   CREATED  STATUS  PORTS        NAMES
65311731f446   jen... "/bi.."   10...    Up 10.. 0.0.0.0:..  jenkins

答案 2 :(得分:3)

只需在前面提供的答案上加盖

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

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

2)在CLI set COMPOSE_CONVERT_WINDOWS_PATHS=1

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

source

答案 3 :(得分:2)

某些容器(例如搬运工)可以与-v /var/run/docker.sock:/var/run/docker.sock配合使用 jenkins容器需要--user root命令具有docker run权限才能成功访问Docker UNIX套接字(在Windows上使用Docker-Desktop)。

  

默认情况下,会在以下位置创建unix域套接字(或IPC套接字)   /var/run/docker.sock,需要root权限或docker   小组成员身份。

来源:https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-socket-option

--group-add docker在Windows上使用Docker-Desktop的效果没有

答案 4 :(得分:2)

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

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

但是确实如此:

-v /usr/local/bin/docker:/usr/bin/docker

我从此问题中采取的解决方案是:https://github.com/docker/for-win/issues/4642

答案 5 :(得分:0)

我从来没有自己使用它,但是我知道它可以使用以下技术在Windows Server 2016的docker的Windows容器上工作: https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-socket-option

实际上,我们在Windows容器上的vsts-agent商店中使用了这样的宿主docker:

# listen using the default unix socket, and on 2 specific IP addresses on this host.    
$ sudo dockerd -H unix:///var/run/docker.sock -H tcp://192.168.59.106 -H tcp://10.10.10.2

# then you can execute remote docker commands (from container to host for example)
$ docker -H tcp://0.0.0.0:2375 ps

答案 6 :(得分:0)

这实际上使它对我有用

docker run -p 8080:8080 -p 50000:50000 -v D:\docker-data\jenkins:/var/jenkins_home -v /usr/local/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock -u root jenkins/jenkins:lts

答案 7 :(得分:0)

效果很好:

docker run -it -v //var/run/docker.sock:/var/run/docker.sock -v /usr/local/bin/docker:/usr/bin/docker ubuntu