適用於 Linux (WSL) 的 Windows 子系統實際上並未保存 $DOCKER_HOST
情況:
我在使用 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>