Microsoft Windows [版本10.0.17134.285],Ubuntu 16.04(WSL),docker-ce(稳定)
我按照这里的指示 - https://nickjanetakis.com/blog/setting-up-docker-for-windows-and-wsl-to-work-flawlessly。我选择了“稳定”而不是“边缘”。我手动安装了c盘映射
sudo mkdir /c
sudo mount --bind /mnt/c /c
而不是WSL配置文件的方式,因为我不确定我是否想要它用于所有我的WSL实例。除此之外,我按照说明进行操作。
我用它启动了Docker守护进程
sudo cgroupfs-mount
sudo dockerd -H tcp://0.0.0.0:2375 --tls=false
当我尝试用我的容器启动时
docker run -d -p 27017:27017 --name testDB mongo:3.4
我明白了
docker: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "process_linux.go:402: container init caused \"rootfs_linux.go:46: preparing rootfs caused \\\"invalid argument\\\"\"": unknown.
并且我无法使用localhost:27017
连接到容器上的MongoDB。
docker ps -a
节目
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e115d1c409a3 mongo:3.4 "docker-entrypoint.s…" 6 seconds ago Created 0.0.0.0:27017->27017/tcp testDB
和
docker info
节目
Containers: 1
Running: 0
Paused: 0
Stopped: 1
Images: 1
Server Version: 18.06.1-ce
Storage Driver: overlay2
Backing Filesystem: <unknown>
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 468a545b9edcd5932818eb9de8e72413e616e86e
runc version: 69663f0bd4b60df09991c08812a60108003fa340
init version: fec3683
Kernel Version: 4.4.0-17134-Microsoft
Operating System: Ubuntu 16.04.5 LTS
OSType: linux
Architecture: x86_64
CPUs: 8
Total Memory: 15.9GiB
Name: DESKTOP-4F100D9
ID: EFH2:O3RT:3OO4:27P5:ZNK7:N5JW:WE5M:4VSK:QREN:YCV4:GSYG:ZDTR
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
WARNING: No memory limit support
WARNING: No swap limit support
WARNING: No kernel memory limit support
WARNING: No oom kill disable support
WARNING: No cpu cfs quota support
WARNING: No cpu cfs period support
WARNING: No cpu shares support
WARNING: No cpuset support
我做错了什么以及如何解决它?
(我需要在Linux下运行Docker(WSL) - 我不能使用Docker for Windows,因为我们使用的是VirtualBox,并禁用了Hyper-V)
目前,您无法直接从WSL使用docker守护程序。有几个问题,主要是网络问题。它仅适用于像hello world(Reddit topic)这样的简单图像
你可以做的是从WSL连接到windows中的docker守护进程。所以按照教程,你提到的很好,但如果你用VirtualBox运行它,你必须启动default
机器或创建并启动一个新机器。这个docker机器将是你的守护进程。
默认情况下,docker-machine
命令在WSL中无法正常工作,但您可以通过将此代码放在例如WSL中来使其工作。 〜/ .bashrc文件
# Ability to run docker-machine command properly from WSL
function docker-machine()
{
if [ $1 == "env" ]; then
docker-machine.exe $1 $2 --shell bash | sed 's/C:/\/c/' | sed 's/\\/\//g' | sed 's:#.*$::g' | sed 's/"//g'
printf "# Run this command to configure your shell:\n"
printf "# eval \"\$(docker-machine $1 $2)\"\n"
else
docker-machine.exe "$@"
fi
}
export -f docker-machine
运行source ~/.bashrc
或重新打开bash后,您可以运行:
docker-machine start default
- 将启动机器eval $(docker-machine env default)
- 将您的bash会话连接到计算机然后你应该能够运行所有的docker之类的东西
docker ps
docker run -it alpine sh
docker build
docker机器将一直运行,直到您停止它或关闭PC。如果您打开一个新的bash会话(窗口),则必须只运行eval $(docker-machine env default)
才能将新会话连接到计算机。
希望能帮助到你。 :)
这是一个简单的解决方案,即在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/