我试图在WSL上运行Docker失败。我按照install Docker on Ubuntu的步骤在WSL上安装了Docker,但是当我执行docker ps
时,我收到以下错误:
docker ps
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
观看码头日志我发现了这个:
level=warning msg="Running modprobe nf_nat failed with message: `modprobe: ERROR: ../libkmod/libkmod.c:586 kmod_search_moddep() could not open moddep file '/lib/modules/4.4.0-43-Microsoft/modules.dep.bin'\nmodprobe: WARNING: Module nf_nat not found in directory /lib/modules/4.4.0-43-Microsoft`, error: exit status 1"
time="2017-12-28T12:07:23.227671600+01:00" level=warning msg="Running modprobe xt_conntrack failed with message: `modprobe: ERROR: ../libkmod/libkmod.c:586 kmod_search_moddep() could not open moddep file '/lib/modules/4.4.0-43-Microsoft/modules.dep.bin'\nmodprobe: WARNING: Module xt_conntrack not found in directory /lib/modules/4.4.0-43-Microsoft`, error: exit status 1"
Error starting daemon: Error initializing network controller: error obtaining controller instance: failed to create NAT chain: iptables failed: iptables -t nat -N DOCKER: iptables v1.6.0: can't initialize iptables table `nat': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.
(exit status 3)
知道如何在WSL上运行Docker?
答案 0 :(得分:11)
最后,我可以轻松地在WSL上运行Docker:首先需要在Windows上安装和运行Docker Engine,然后在Ubuntu bash上创建一个指向Windows可执行文件的符号链接:
sudo ln -s /mnt/c/Program\ Files/Docker/Docker/resources/bin/docker.exe /usr/bin/docker
此链接有效,因为从版本 Windows 10 Creators更新 ,可以从Bash运行Windows可执行文件。如果Windows版本是Windows 10 Creators Update之前的版本,则可以尝试solution explained in this blog
答案 1 :(得分:9)
等待接下来几周内为所有人提供的下一个Windows 10功能版本!
答案 2 :(得分:3)
尝试使用WSL运行Linux dockerd守护程序不太可行,Docker for Linux需要运行Linux内核,而WSL是实现Linux系统调用的Windows内核,允许您运行Linux程序。
相反,您应该使用嵌入式Linux VM(Hyper-V或VirtualBox,具体取决于您的版本)安装支持Linux容器的docker for windows。安装Windows版本的docker之后,您将拥有可以从各种命令行访问的docker客户端,包括cmd和bash。
答案 3 :(得分:2)
此刻,您无法在WSL中运行dockerd
和实际的docker运行时。尽管绝非如此,但这意味着将来将不可能。
仍然可以使用WSL的docker
客户端来控制Windows²泊坞窗守护程序及其容器。
在WSL中,只需执行export DOCKER_HOST='tcp://localhost:2375'
。此外,在Windows²Docker设置中允许TCP访问。现在,您可以执行docker ps
并在Windows²上查看由dockerd
驱动的容器。
如果您Cannot connect to the Docker daemon at tcp://localhost:2375. Is the docker daemon running?
,则表示您没有在Windows的Docker设置中启用TCP访问。
²实际上Windows根本不支持Docker。 Hyper-V“ Moby” Linux实例可在Windows上启用Docker。
答案 4 :(得分:1)
给出的答案已过期。 按照该博客中链接到该博客的说明进行操作:Running Docker containers on Bash on Windows。解决方案仍然非常简单。
export PATH="/mnt/c/Program\ Files/Docker/Docker/resources/bin:$PATH"
alias docker=docker.exe
alias docker-compose=docker-compose.exe
就是这样。可以。
答案 5 :(得分:1)
对于Windows 10-内部版本1909
这对我有用。在WLS Ubuntu中运行这些命令。
$ sudo ln -s /mnt/c/Program\ Files/Docker/Docker/resources/bin/docker.exe /usr/bin/docker
$ alias docker='docker.exe'
$ alias docker-compose=docker-compose.exe
Windows不允许WSL将TCP用于Docker,因此您需要将docker文件链接到Windows中的docker.exe。
答案 6 :(得分:0)
"Docker for windows"
。"Docker for windows" > settings > general
启用 expose on tcp//*** without TLS
。DOCKERVERSION=18.03.1-ce
curl -fsSLO https://download.docker.com/linux/static/stable/x86_64/docker-${DOCKERVERSION}.tgz \
&& tar xzvf docker-${DOCKERVERSION}.tgz --strip 1 -C /usr/local/bin docker/docker \
&& rm docker-${DOCKERVERSION}.tgz
export DOCKER_HOST='tcp://localhost:2375'
在sybsystem上。答案 7 :(得分:0)
似乎Docker是否可以在WSL上正常运行可能取决于许多因素,因此某些系统上的正确答案可能并不适合所有人。对我来说,直到安装WSL2后,我才能使其正常运行。WSL2需要Windows 10内部版本,当前只能通过注册Windows Insider程序(截至2020年5月)才能使用。在网上搜索并尝试了多种方法失败后,我终于遇到this article,它对我来说是正确的答案。
对我来说,有两个警告:1.我必须在我的BIOS中启用“虚拟化”(用于运行虚拟机),以及2.安装docker-compose的最终命令似乎无效,所以I followed this。
*最后,我应该注意,Docker桌面将无法在Windows 10家庭版上运行,因此WSL2是我系统上的唯一选择。
答案 8 :(得分:0)
创建NAT链失败:iptables失败
尝试通过dockerd
运行--iptables=false
服务(考虑添加-D
进行调试)。
--iptables
启用iptables规则添加(默认为true)