Docker работает в WSL или подключается к Windows?

После успешной установки Docker в WSL, если я запускаю стандартные команды Docker, я получаю ошибки подключения. Работа с sudo или без нее дает одинаковый результат во всех примерах.

root@SUR002731165154:~# sudo docker info
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

root@SUR002731165154:~# sudo docker version
Client:
Version:      1.13.1
API version:  1.26
Go version:   go1.7.5
Git commit:   092cba3
Built:        Wed Feb  8 06:42:29 2017
OS/Arch:      linux/amd64
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

Однако, если я добавлю -H localhost: 2375 к команде, я смогу запустить Docker без проблем. Подключается ли Docker к моему локальному компьютеру с Windows 10 или он работает локально на WSL, или делает то и другое?

root@SUR002731165154:~# docker -H localhost:2375 version
Client:
Version:      1.13.1
API version:  1.26
Go version:   go1.7.5
Git commit:   092cba3
Built:        Wed Feb  8 06:42:29 2017
OS/Arch:      linux/amd64

Server:
Version:      1.13.1
API version:  1.26 (minimum version 1.12)
Go version:   go1.7.5
Git commit:   092cba3
Built:        Wed Feb  8 08:47:51 2017
OS/Arch:      linux/amd64
Experimental: true

root@SUR002731165154:~# docker -H localhost:2375 info
Containers: 11
Running: 0
Paused: 0
Stopped: 11
Images: 8
Server Version: 1.13.1
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: aa8187dbd3b7ad67d8e5e3a15115d3eef43a7ed1
runc version: 9df8b306d01f59d3a8029be411de015b7304dd8f
init version: 949e6fa
Security Options:
seccomp
Profile: default
Kernel Version: 4.9.8-moby
Operating System: Alpine Linux v3.5
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 1.934 GiB
Name: moby
ID: 4LYM:R5T5:6CPZ:Z2KC:YQ4R:NGN4:V6SR:DF7E:YPYO:7FHY:EQW5:2T7W
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): true
File Descriptors: 13
Goroutines: 21
System Time: 2017-02-28T18:54:13.7726687Z
EventsListeners: 0
Registry: https://index.docker.io/v1/
Experimental: true
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false

person Steve Ermish    schedule 28.02.2017    source источник


Ответы (3)


Демон Docker не может работать под WSL, поскольку он не реализует необходимые ABI ядра. Если вы используете Docker для Windows, вы, вероятно, подключаетесь к виртуальной машине Hyper-V, которой он управляет.

Поскольку он находится на другом компьютере, вы не сможете монтировать каталоги WSL как тома Docker, но вы можете создавать образы из каталога WSL. Это связано с тем, что при сборке клиент создает архив и отправляет его демону.

person DeltaWhy    schedule 03.03.2017

Это обходной путь - вместо этого использовать Docker в Windows в WSL.

Просто добавьте следующее в ваш WSL .bashrc файл.

export PATH="$HOME/bin:$HOME/.local/bin:$PATH"
export PATH="$PATH:/mnt/c/Program\ Files/Docker/Docker/resources/bin"
alias docker=docker.exe
alias docker-compose=docker-compose.exe

Ссылка: https://blog.jayway.com/2017/04/19/running-docker-on-bash-on-windows/.

person Yuxiang    schedule 09.03.2019
comment
И как использовать псевдонимы в сценариях оболочки: unix.stackexchange.com/a/125405/15183 - person Vadzim; 28.09.2019

Как указывалось в других ответах, Docker не может быть установлен и размещен внутри WSL, но может использоваться непосредственно оттуда как любой исполняемый файл Windows.

Может потребоваться только дополнительное усилие, чтобы его можно было использовать без этих надоедливых расширений .exe: Bash в Windows - псевдоним для exe-файлов. Связанный обходной путь предоставляет готовый к использованию настраиваемый скрипт для простого создания символических ссылок. В отличие от псевдонимов bash, символические ссылки можно свободно использовать внутри неинтерактивных сценариев оболочки.


Также существует подход с подключением из WSL к Docker для Windows в качестве удаленного хоста, описанный в https://nickjanetakis.com/blog/setting-up-docker-for-windows-and-wsl-to-work-flawlessly.

Если вам интересно, почему бы просто не запустить docker.exe и docker-compose.exe из Docker для Windows непосредственно в WSL? - это связано с ошибкой при интерактивном запуске Docker или Docker Compose в этой среде. TL; DR - вы не можете запускать что-либо на переднем плане в интерактивном режиме, что делает его непригодным для реальной веб-разработки.

Но, к сожалению, здесь нет никаких ссылок на точные симптомы ошибки. И я пока с этим не сталкивался.

person Vadzim    schedule 29.09.2019