Подтвердить что ты не робот

Привязать к док-станции в Windows

В системах * nix можно связать-установить сокет докера с главной машины на виртуальную машину, выполнив что-то вроде этого:

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

Есть ли эквивалентный способ сделать это при запуске docker на хосте Windows?


Я пробовал различные комбинации, например:

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

ни один из них не работал.

4b9b3361

Ответ 1

Для Docker для Windows, кажется, работает следующее:

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

Ответ 2

Как сообщает документация Docker:

Если вы используете Docker Machine на Mac или Windows, демон вашего 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.

Например, когда я запускаю собственное изображение Jenkins с помощью следующей команды на компьютере под управлением Windows:

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

Я все еще могу поговорить с Docker Daemon на главной машине, используя типичные команды docker. Например, когда я запускаю docker ps в контейнере Jenkins, я могу видеть запущенные контейнеры в главной машине:

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

Ответ 3

Просто чтобы завершить это на ответах, предоставленных ранее

При использовании docker-compose необходимо установить COMPOSE_CONVERT_WINDOWS_PATHS=1 одним из следующих способов:

1) создайте файл .env в том же месте, что и файл проекта docker-compose.yml

2) в CLI set COMPOSE_CONVERT_WINDOWS_PATHS=1

перед запуском команды docker-compose up.

источник

Ответ 4

Некоторые контейнеры (например, portainer) отлично работают с -v /var/run/docker.sock:/var/run/docker.sock Контейнеру jenkins требовались разрешения --user root для команды docker run для успешного доступа к сокету Docker UNIX (с помощью Docker-Desktop в Windows).

По умолчанию сокет домена unix (или сокет IPC) создается в /var/run/docker.sock, требующий либо разрешения root, либо docker членство в группах.

Источник: https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-socket-option

--group-add docker не имел никакого эффекта при использовании Docker-Desktop на Windows.

Ответ 5

Это никогда не работало для меня в Windows 10, даже если это контейнер linux:

-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

Ответ 6

Я никогда не делал это сам, но я знаю, что он работает на контейнере Windows на Docker для Windows Server 2016, используя эту технику: https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-socket-option

На самом деле у нас в магазине есть vsts-агенты для контейнеров Windows, в которых используется докер хоста:

# 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