Bind aan docker-socket op Windows

Op *nix-systemen is het mogelijk om de docker-socket van de hostmachine naar de VM te binden door zoiets als dit te doen:

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

Is er een gelijkwaardige manier om dit te doen bij het uitvoeren van docker op een Windows-host?


Ik heb verschillende combinaties geprobeerd, zoals:

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 ...

geen van deze heeft gewerkt.


Antwoord 1, autoriteit 100%

Voor Docker voor Windows lijkt het volgende te werken:

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


Antwoord 2, autoriteit 13%

Zoals de Docker-documentatie aangeeft:

Als u Docker Machine op Mac of Windows gebruikt, is uw Engine-daemon
heeft slechts beperkte toegang tot uw OS X- of Windows-bestandssysteem. Docker
Machine probeert uw /Users(OS X) of C:\Users(Windows) automatisch te delen
map. U kunt dus bestanden of mappen op OS X koppelen met:

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

Op Windows, koppel mappen aan met:

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

Alle andere paden komen van het bestandssysteem van uw virtuele machine, dus als u
een andere hostmap beschikbaar wilt maken om te delen, moet u:
extra werk doen. In het geval van VirtualBox moet u de
hostmap beschikbaar als gedeelde map in VirtualBox. Dan kunt u
mount het met de Docker -v vlag.

Dat gezegd hebbende, kun je nog steeds de:

. gebruiken

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

De eerste /var/run/docker.sockverwijst naar hetzelfde pad in uw boot2dockervirtuele machine.

Als ik bijvoorbeeld mijn eigen Jenkins-image uitvoer met de volgende opdracht op een Windows-computer:

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

Ik kan nog steeds met de Docker Daemon in de hostcomputer praten met de typische docker-commando’s. Als ik bijvoorbeeld docker psin de Jenkins-container uitvoer, zie ik actieve containers in de hostmachine:

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

Antwoord 3, autoriteit 6%

Om het af te maken met de eerder gegeven antwoorden

Als je docker-compose gebruikt, moet je de COMPOSE_CONVERT_WINDOWS_PATHS=1instellen op:

1) maak een .env-bestand op dezelfde locatie als het docker-compose.yml-bestand van het project

2) in de CLI set COMPOSE_CONVERT_WINDOWS_PATHS=1

voordat u de opdracht docker-compose up uitvoert.

bron


Antwoord 4, autoriteit 5%

Dit werkte nooit voor mij op Windows 10, zelfs niet als het een Linux-container is:

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

Maar dit wel:

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

Oplossing uit dit probleem dat ik heb geopend: https://github.com/docker/ for-win/issues/4642


Antwoord 5, autoriteit 2%

Sommige containers (bijv. porttainer) werken prima met -v /var/run/docker.sock:/var/run/docker.sock
De jenkins-container vereiste --user root-machtigingen op de opdracht docker runom met succes toegang te krijgen tot de Docker UNIX-socket (met Docker-Desktop op Windows).

Standaard wordt een unix-domein-socket (of IPC-socket) gemaakt op
/var/run/docker.sock, waarvoor ofwel roottoestemming nodig is, of docker
groepslidmaatschap.

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

--group-add dockerhad geeneffect bij gebruik van Docker-Desktop op Windows.


Antwoord 6

het werkt goed :

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

Antwoord 7

Om te binden aan een Windows-container moet je leidingen gebruiken.

-v \\.\pipe\docker_engine:\\.\pipe\docker_engine

Antwoord 8

Ik heb het zelf nooit laten werken, maar ik weet dat het werkt op windows container op docker voor windows server 2016 met behulp van deze techniek:
https://docs.docker.com/engine/reference /commandline/dockerd/#daemon-socket-option

We hebben in de winkel vsts-agents op Windows-containers die de host-docker zo gebruiken:

# 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

Antwoord 9

Hierdoor werkte het echt voor mij

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

Antwoord 10

Wat voor mij geschikt was in Windows 10was:

-v "\\.\pipe\docker_engine:\\.\pipe\docker_engine"

Houd er rekening mee dat ik toegang probeerde te krijgen tot portainer, wat ik sterk aanbeveel, het is een geweldige app. Daarvoor gebruik ik dit commando:

docker run -d -p 9000:9000 -v "\\.\pipe\docker_engine:\\.\pipe\docker_engine" portainer/portainer 

En ga dan gewoon naar:

http://localhost:9000/

Other episodes