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) ofC:\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.sock
verwijst naar hetzelfde pad in uw boot2docker
virtuele 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 ps
in 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=1
instellen 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.
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 run
om 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 ofwelroot
toestemming nodig is, ofdocker
groepslidmaatschap.
Bron: https://docs.docker. com/engine/reference/commandline/dockerd/#daemon-socket-option
--group-add docker
had 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 10
was:
-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/