我可以安装docker,docker-compose和docker-machine
然而,当我尝试运行时
root@DESKTOP-51NFMIM:~# docker ps
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
有没有解决这个问题的建议?
答案 0 :(得分:19)
在这篇文章中找到解决方案:https://blog.jayway.com/2017/04/19/running-docker-on-bash-on-windows/
对另一台机器上的引擎运行docker实际上非常简单,因为Docker可以公开CLI可以附加到的TCP端点。
默认情况下,此TCP端点处于关闭状态;要激活它,请右键单击任务栏中的Docker图标,然后选择“设置”,并勾选“在tcp:// localhost:2375上显示守护程序而不使用TLS”旁边的框。
完成后,我们需要做的就是指示Bash下的CLI连接到在Windows下运行的引擎,而不是连接到在Bash下运行的不存在的引擎,如下所示:
$ docker -H tcp://0.0.0.0:2375 images
有两种方法可以使这个永久化 - 为上述命令添加别名或导出一个环境变量,指示Docker在哪里找到主机引擎(注意:确保使用下面的单个撇号):
$ echo "export DOCKER_HOST='tcp://0.0.0.0:2375'" >> ~/.bashrc
$ source ~/.bashrc
现在,从Bash运行docker命令就像他们应该的那样工作。
$ docker run hello-world
成功回应:
Hello from Docker!This message shows that your installation appears to be working correctly.
答案 1 :(得分:4)
注意:如果您使用WSL (Windows Subsystem for Linux)中的Ubuntu,请了解docker客户端是否正常工作,而不是docker服务器(守护程序)。
请参阅Microsoft/WSL issue 2114和this thread。
对于服务器,您仍然只需要使用Docker for Windows及其Hyper-V VM。
然后,Microsoft/WSL issue 2102添加:
通过将
DOCKER_CERT_PATH
环境变量(我从运行eval $(docker-machine.exe env --shell bash)
获得)从“C:\C:\Users\mmarchini\.docker\machine\machines\default
”更改为“/mnt/c/Users/mmarchini/.docker/machine/machines/default/
”,我能够在WSL内部开展TLS工作。
至少docker build现在似乎正在运行,我稍后会尝试使用docker-compose
。
请参阅this script(来自Matheus Marchini)以使用正确的设置启动docker-machine bash:
#!/usr/bin/env python3
from subprocess import run, PIPE
completed_process = run(["docker-machine.exe", "env", "--shell", "bash"], stdout=PIPE)
docker_env = completed_process.stdout.decode("ascii")
for line in docker_env.split("\n"):
if "DOCKER_CERT_PATH" in line:
env_var, path, _ = line.split('"')
path = path.replace("\\", "/")
drive, path = path.split(":", 1)
path = "/mnt/{}{}".format(drive.lower(), path)
line = '{}"{}"'.format(env_var, path)
print(line)
答案 2 :(得分:1)
如果您正在运行Windows 10版本1803或更高版本,则现在可以在没有Docker Desktop for Windows的WSL中完全安装和运行Docker客户端和服务器。我在以下WSL上运行它:
OS: Ubuntu 18.04 bionic [Ubuntu on Windows 10]
Kernel: x86_64 Linux 4.4.0-17763-Microsoft
只需遵循相同的instructions即可在Ubuntu上安装,但请确保选择要安装的特定版本。目前,版本 18.06.1〜ce〜3-0〜ubuntu 可以正常工作,但更高版本的 5:18.09.6〜3-0〜ubuntu-bionic 具有启动容器的问题。以下命令将安装最新的工作版本:
apt-get install docker-ce=18.06.1~ce~3-0~ubuntu
要使Docker服务器在安装后在WSL中运行,请关闭所有打开的终端并以管理员身份启动新的Ubuntu终端(即,右键单击Ubuntu快捷方式,然后单击“以管理员身份运行”)。最后,运行以下命令:
sudo cgroupfs-mount
sudo service docker start
每次重新启动Windows时,必须运行 sudo service docker start
。但是,如果您希望避免这种情况,可以按照here列出的步骤,使用任务计划程序和外壳程序脚本将其自动化。
使用以下命令测试一切正常:
docker run hello-world
参考: https://medium.com/faun/docker-running-seamlessly-in-windows-subsystem-linux-6ef8412377aa
答案 3 :(得分:1)
对我来说,这适用于Windows的WSL:
假设您已经为Windows和Windows安装了docker桌面 在tcp:// localhost:2375上的Settings-> General-> Expose守护进程中选中不带TLS
答案 4 :(得分:1)
如果您将docker桌面用于Windows(并且不需要TLS进行连接),请转到docker桌面设置的常规部分,并启用复选框“在不带TLS的tcp:// localhost:2375上公开守护程序”复选框。
更新:在较新的Docker桌面版本中,WSL集成已移至资源部分。
答案 5 :(得分:0)
答案 6 :(得分:0)
除了已经说过的内容之外,我还想与您分享我在设置时遇到的一些问题以及最终让我开始使用 WSL2/Docker 桌面组合的解决方案。 这不是一个完整的指南,只是故障排除的另一个来源!
现在在 Ubuntu WSL2 上运行“docker context ls”来检查我的设置应该会导致:
NAME DESCRIPTION DOCKER ENDPOINT KUBERNETES ENDPOINT ORCHESTRATOR default * Current DOCKER_HOST based configuration unix:///var/run/docker.sock swarm
从 Ubuntu WSL2 运行 Docker 信息:
Client: Context: default Debug Mode: false Plugins: app: Docker App (Docker Inc., v0.9.1-beta3) buildx: Build with BuildKit (Docker Inc., v0.5.0-docker) scan: Docker Scan (Docker Inc., v0.5.0) Server: Containers: 3 Running: 0 Paused: 0 Stopped: 3 Images: 3...