在* 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 ...
这些都没有奏效。
答案 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命令之前。
答案 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