情况:
我在使用 WSL 运行 docker 的 Windows VDI 上进行开发,实际上我使用的是在 Red Hat 服务器上运行的远程 docker 守护进程。在本地,我将DOCKER_HOST
变量设置为我的 docker 守护进程 ( tcp://<userid>@<my server running the remote docker daemon>
) 的正确路径,但此环境变量仅在设置后立即被识别。
我的意思是,现在,如果我运行 docker 命令,我会收到错误Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
,但如果我用 分配DOCKER_HOST
给自己$ export DOCKER_HOST=$DOCKER_HOST
,未来的 docker 命令现在将识别我使用该变量将其定向到的远程守护程序。
我已将此分配添加到DOCKER_HOST
我的 中~/.bashrc
,当我重新启动 shell 并运行 时,我可以看到它已正确设置$ echo $DOCKER_HOST
。
预期行为:
我希望 docker 命令引用DOCKER_HOST
中设置的变量~/.bashrc
,确认其存在$ echo $DOCKER_HOST
现实:
Docker 无法识别此变量/此变量的值,除非它是在活动 shell 会话中设置的。我实际上必须将变量分配给自身,以便 docker 识别它(例如export DOCKER_HOST=$DOCKER_HOST
),只有这样 docker 命令才会针对远程守护进程运行。
我的问题:
为什么我必须重置DOCKER_HOST
变量才能让 docker 识别它?
如果我这样做不正确,正确的方法是什么?
我愿意听到我的问题问错了地方。我可以认为这是一个 Linux/WSL 问题,或者是 docker 本身的问题。
答案1
我在发布这篇文章后不久就找到了解决方案,我觉得有点傻。
问题是我只是在其中设置了一个 shell 变量~/.bashrc
,而不是导出环境变量。
解决方案:
修改~/.bashrc
为使用export
:
export DOCKER_HOST=tcp://<userid>@<my server running the remote docker daemon>
而不仅仅是:
DOCKER_HOST=tcp://<userid>@<my server running the remote docker daemon>