在WSL中成功安装Docker之后,如果我运行标准的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是连接到我的localhost 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
答案 0 :(得分:6)
Docker守护程序无法在WSL下运行,因为它没有实现必要的内核ABI。如果您正在运行Docker for Windows,您可能正在连接到它管理的Hyper-V虚拟机。
因为它位于不同的计算机上,您将无法将WSL目录挂载为Docker卷,但您可以从WSL目录构建映像。这是因为在构建时,客户端会创建一个tarball并将其发送给守护程序。
答案 1 :(得分:1)
这是一种变通方法,可以在WSL中的Windows上使用Docker。
只需将以下内容添加到您的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/
答案 2 :(得分:0)
如其他答案所述,Docker无法在WSL中安装和托管,但可以作为Windows可执行文件直接从那里使用。
在没有那些讨厌的.exe
扩展名的情况下,只需付出额外的努力即可使其可用:
Bash on Windows - alias for exe files。
链接的解决方法提供了易于使用的自定义脚本,可轻松创建符号链接。与bash别名不同,可以在非交互式shell脚本中自由使用符号链接。
还有一种将WSL连接到Docker for Windows作为https://nickjanetakis.com/blog/setting-up-docker-for-windows-and-wsl-to-work-flawlessly中所述的远程主机的方法。
如果您想知道“为什么不直接在WSL中直接从Docker for Windows运行docker.exe和docker-compose.exe?”,那是由于在该环境中以交互方式运行Docker或Docker Compose的错误。 TL; DR是您无法使用交互模式在前台运行任何东西的功能,这使其无法用于实际的Web开发。
但是遗憾的是,那里没有确切的错误症状参考。 我到目前为止还没有面对。