Ubuntu

適用於 Linux (WSL) 的 Windows 子系統實際上並未保存 $DOCKER_HOST

  • December 3, 2019

情況:

我在使用 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

現實:

除非在活動 shell 的會話中設置,否則 Docker 無法辨識此變數/此變數的值。我實際上必須將變數分配給它自己,以便 docker 辨識它(例如export DOCKER_HOST=$DOCKER_HOST),然後 docker 命令才會針對遠端守護程序執行。

我的問題:

為什麼我必須重置DOCKER_HOST變數才能讓 docker 能夠辨識它?

如果我做錯了,正確的方法是什麼?

我很樂意聽到我的問題在錯誤的地方。我可以看到這是一個 Linux/WSL 問題,或者是 docker 本身的問題。

我在發布後不久就找到了解決方案,我覺得有點傻。

問題是我只是在其中設置了一個 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>

引用自:https://unix.stackexchange.com/questions/555347