docker-撰写忽略 DOCKER_HOST
docker-compose ignores DOCKER_HOST
我正在尝试 运行 3 Docker 图像、MySQL、Redis 和我在 Bash 上的一个项目 Windows (WSL)。
为此,我必须在 Windows 上连接到 Docker 引擎 运行,特别是在 tcp://locahost:2375
上。我已将以下行附加到 .bashrc
:
export DOCKER_HOST=tcp://127.0.0.1:2375
我可以成功地 运行 docker
命令,例如 docker ps
或 docker run hello-world
但是每当我 cd
进入我的项目目录和 运行
sudo docker-compose up --build
加载图像并启动容器时出现错误:
ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?
If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.
我知道,如果我使用 -H
参数,我可以提供地址,但我宁愿找到一个更永久的解决方案。出于某种原因 docker-compose
似乎忽略了 DOCKER_HOST
环境变量,我不明白为什么..
您的问题是sudo
。它是一个与您的 shell 完全不同的程序,除非您特别指定,否则不会传输导出的环境。您可以在 /etc/sudoers
(或 /etc/sudoers.d/docker
)中添加以下行:
Defaults env_keep += DOCKER_HOST
或者您可以直接将其传递给命令行:
sudo DOCKER_HOST=$DOCKER_HOST docker-compose up --build
通过设置 DOCKER_HOST
,您可以在命令行中告诉 docker 的每个 运行 使用 http api,而不是默认 - socket on localhost.
默认http api未开启
$ sudo cat /lib/systemd/system/docker.service | grep ExecStart
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
您可以在本地主机上的 http api 上为 tern 添加 -H tcp://127.0.0.1:2375
但通常你想通过 -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
我正在尝试 运行 3 Docker 图像、MySQL、Redis 和我在 Bash 上的一个项目 Windows (WSL)。
为此,我必须在 Windows 上连接到 Docker 引擎 运行,特别是在 tcp://locahost:2375
上。我已将以下行附加到 .bashrc
:
export DOCKER_HOST=tcp://127.0.0.1:2375
我可以成功地 运行 docker
命令,例如 docker ps
或 docker run hello-world
但是每当我 cd
进入我的项目目录和 运行
sudo docker-compose up --build
加载图像并启动容器时出现错误:
ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?
If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.
我知道,如果我使用 -H
参数,我可以提供地址,但我宁愿找到一个更永久的解决方案。出于某种原因 docker-compose
似乎忽略了 DOCKER_HOST
环境变量,我不明白为什么..
您的问题是sudo
。它是一个与您的 shell 完全不同的程序,除非您特别指定,否则不会传输导出的环境。您可以在 /etc/sudoers
(或 /etc/sudoers.d/docker
)中添加以下行:
Defaults env_keep += DOCKER_HOST
或者您可以直接将其传递给命令行:
sudo DOCKER_HOST=$DOCKER_HOST docker-compose up --build
通过设置 DOCKER_HOST
,您可以在命令行中告诉 docker 的每个 运行 使用 http api,而不是默认 - socket on localhost.
默认http api未开启
$ sudo cat /lib/systemd/system/docker.service | grep ExecStart
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
您可以在本地主机上的 http api 上为 tern 添加 -H tcp://127.0.0.1:2375
但通常你想通过 -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