我想通过 PyCharm 连接到在 WSL2 中运行的 Docker TCP 套接字。我似乎无法公开套接字,我想可能是因为 WSL2(systemctl)中对 docker-daemon 的控制有限?我不能使用 Docker Desktop,因为我需要 GPU 支持(Windows Dev Channel + nvidia-docker)。我尝试了以下方法:
导出 DOCKER_HOST=tcp://0.0.0.0:2375
$ export DOCKER_HOST=tcp://0.0.0.0:2375
$ sudo service docker restart
$ docker context ls
NAME DESCRIPTION DOCKER ENDPOINT KUBERNETES ENDPOINT ORCHESTRATOR
default * Current DOCKER_HOST based configuration tcp://0.0.0.0:2375 swarm
Warning: DOCKER_HOST environment variable overrides the active context. To use a context, either set the global --context flag, or unset DOCKER_HOST environment variable.
$ curl --unix-socket /var/run/docker.sock http:/localhost/version
{"Platform":{"Name":"Docker Engine - Community"},"Components":[{"Name":"Engine","Version":"19.03.11","Details":{"ApiVersion":"1.40","Arch":"amd64","BuildTime":"2020-06-01T09:10:54.000000000+00:00","Experimental":"false","GitCommit":"42e35e61f3","GoVersion":"go1.13.10","KernelVersion":"4.19.121-microsoft-standard","MinAPIVersion":"1.12","Os":"linux"}},{"Name":"containerd","Version":"1.2.13","Details":{"GitCommit":"7ad184331fa3e55e52b890ea95e65ba581ae3429"}},{"Name":"runc","Version":"1.0.0-rc10","Details":{"GitCommit":"dc9208a3303feef5b3839f4323d9beb36df0a9dd"}},{"Name":"docker-init","Version":"0.18.0","Details":{"GitCommit":"fec3683"}}],"Version":"19.03.11","ApiVersion":"1.40","MinAPIVersion":"1.12","GitCommit":"42e35e61f3","GoVersion":"go1.13.10","Os":"linux","Arch":"amd64","KernelVersion":"4.19.121-microsoft-standard","BuildTime":"2020-06-01T09:10:54.000000000+00:00"}
$ curl http://localhost:2375/version
curl: (7) Failed to connect to localhost port 2375: Connection refused
我希望给出的最后一个命令会产生类似{"Version":"17.05.0-ce","ApiVersion":"...}
但连接被拒绝的结果。事实上,如果我尝试通过 Windows 主机 Pycharm 连接,它会拒绝连接。我还看到许多教程/SO 帖子说不要使用这种 DOCKER_HOST 方法,但我不知道为什么。
/lib/systemd/system/docker.service > ExecStart
根据stackoverflow、serverfault、ivankrizsan,我/lib/systemd/system/docker.service
使用ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
. 但是当我尝试systemctl daemon-reload
错误时;WSL2 不支持systemctl
命令 ( WSL/457 )。
$ sudo systemctl daemon-reload
System has not been booted with systemd as init system (PID 1). Can't operate.
我还尝试重新启动 WSL2(Powershell wsl --shutdown
,重新打开 WSL2),以防 docker-daemon 选择这些更改,但没有雪茄。
$ curl http://localhost:2375/version
curl: (7) Failed to connect to localhost port 2375: Connection refused
/etc/default/docker > DOCKER_OPTS
根据stackoverflow,我/etc/default/docker
用DOCKER_OPTS="-H unix:// -H tcp://0.0.0.0:2375"
then 进行了编辑sudo service docker restart
。相同的连接被拒绝错误。