1

我正在尝试在 Bash for Windows (WSL) 上运行 3 个 Docker 映像、MySQL、Redis 和我的一个项目。

为此,我必须连接到在 Windows 上运行的 Docker 引擎,特别是在tcp://locahost:2375. 我已将以下行附加到.bashrc

export DOCKER_HOST=tcp://127.0.0.1:2375

我可以成功运行docker类似docker psor的命令,docker run hello-world但是每当我cd进入我的项目目录并运行 sudo docker-compose up --build以加载图像并启动容器时,我都会收到错误消息:

错误:无法在 http+docker://localunixsocket 连接到 Docker 守护程序 - 它正在运行吗?

如果它位于非标准位置,请使用 DOCKER_HOST 环境变量指定 URL。

我知道如果我使用这个-H参数,我可以提供地址,但我宁愿找到一个更永久的解决方案。由于某种原因docker-compose似乎忽略了DOCKER_HOST环境变量,我不知道为什么..

4

2 回答 2

7

你的问题是sudo。它是一个与你的 shell 完全不同的程序,除非你明确告诉它,否则它不会传输导出的环境。您可以在/etc/sudoers(或/etc/sudoers.d/docker)中添加以下行:

Defaults env_keep += DOCKER_HOST

或者您可以直接将其传递给命令行:

sudo DOCKER_HOST=$DOCKER_HOST docker-compose up --build 
于 2018-02-25T15:07:54.330 回答
0

通过设置DOCKER_HOST,您告诉在命令行中每次运行 docker 使用http api,而不是默认 - localhost 上的套接字

默认不开启http api

$ sudo cat /lib/systemd/system/docker.service | grep ExecStart
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

您可以-H tcp://127.0.0.1:2375在 localhost 上的 http api 上添加 tern,但通常您希望通过-H tcp://0.0.0.0:2375 (仅使用适当的防火墙)为远程服务器添加 api

所以你需要换 /lib/systemd/system/docker.service到下一行

ExecStart=/usr/bin/dockerd -H fd:// -H tcp://127.0.0.1:2375 --containerd=/run/containerd/containerd.sock
于 2020-03-31T15:41:07.070 回答