当前位置: 首页 > 知识库问答 >
问题:

如何在WSL2上公开Docker TCP套接字?(WSL安装的Docker,而不是Docker Desktop)

仇飞鹏
2023-03-14

我想通过PyCharm连接到在WSL2中运行的Docker TCP套接字。我似乎不能公开套接字,我想可能是因为WSL2(system ctl)中对docker-daemon的控制有限?我不能使用Docker Desktop,因为我需要GPU支持(Windows Dev Channel nvidia-docker)。我尝试了以下方法:

$ 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\u主机方法,但我不确定为什么。

根据stackoverflow,serverfault,ivankrizsan,我编辑了/lib/systemd/system/docker.serviceExecStart=/usr/bin/dockerd-H fd://--containerd=/run/containerd/containerd.sock-Htcp://0.0.0.0:2375。但是当我尝试重新加载systemctl守护进程时,它会出错;WSL2不支持systemctl命令(WSL/457)。

$ sudo systemctl daemon-reload
System has not been booted with systemd as init system (PID 1). Can't operate.

我还尝试重新启动WSL2(Powershellwsl--shutdown,重新打开WSL2),以防docker守护进程将接收到这些更改,但没有任何更改。

$ curl http://localhost:2375/version
curl: (7) Failed to connect to localhost port 2375: Connection refused

根据stackoverflow,我使用docker\u OPTS=“-H unix://-H”编辑了/etc/default/dockertcp://0.0.0.0:2375“然后sudo服务docker重新启动。相同的连接拒绝了错误。

共有1个答案

潘安邦
2023-03-14

来自Gist

{"hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]}

TLS支持:更详细的服务器故障,一步一步的博客文章。如果您在服务器上设置Docker,我建议您遵循博客文章。对我来说,我只想要WSL2中的Docker,Windows可访问的套接字(PyCharm)和TLS安全。所以我的修改使用~/. docker

"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2376"],
"tlscacert": "/home/lefnire/.docker/certs/ca.pem",
"tlscert": "/home/lefnire/.docker/certs/server-cert.pem",
"tlskey": "/home/lefnire/.docker/certs/server-key.pem",
"tlsverify": true

注意我使用的是~/.docker/certs而不是/etc/docker/certs。我遇到了PyCharm需要访问“证书文件夹”的权限障碍,即使尝试了chmod-v0444x

$ mkdir ~/.docker/certs
$ cd ~/.docker/certs
$ openssl genrsa -aes256 -out ca-key.pem 4096  # enter passphrase
$ openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem  # enter localhost at FQDN step
$ openssl genrsa -out server-key.pem 4096
$ openssl req -subj "/CN=localhost" -sha256 -new -key server-key.pem -out server.csr
$ openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem
$ echo subjectAltName = DNS:localhost,IP:127.0.0.1 >> extfile.cnf
$ echo extendedKeyUsage = serverAuth >> extfile.cnf
$ openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
$ openssl genrsa -out key.pem 4096
$ openssl req -subj '/CN=client' -new -key key.pem -out client.csr
$ echo extendedKeyUsage = clientAuth > extfile-client.cnf
$ openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile-client.cnf

忽略openssl RAND错误(或修复它)

  1. 文件
  1. 下拉列表
 类似资料:
  • 目的:安装wsl 问题:公司网络做了限制,无法通过app store安装 设想:是不是能手动下载一个wsl镜像手动安装 问题:没找到这类教程 尝试:各种翻过公司网络的方式都尝试了,没成功 更新:找了个ubuntu的镜像,下载安装后报错如下

  • 有没有人有同样的困难,但解决了这个问题? 提前谢谢!

  • windows10 下面安装wsl --install 我平常用惯了了centos 但是这里好像没有 应该怎么处理呢 打开docker desktop 我想使用dockerdesktop 我查看我的w10版本是符合的

  • 我在Windows上安装了支持WSL2的Docker Desktop。一切按预期进行。当我使用卷挂载运行容器时,我可以访问该文件夹中的所有windows文件。 不幸的是,docker中的windows共享的性能并不是很好,所以我尝试从wsl机器挂载一条路径。 但是使用的输出只是,而使用的输出是我的主目录。 有人能给我解释一下当我从Windows运行时,这个目录(物理上/在wsl/我的计算机中)在哪

  • 问题内容: 我有一个带有Phalcon3和php 7的Docker容器。我正在尝试安装php扩展名Mcrypt,但不走运。 如果我对容器执行ssh并执行: 我得到以下内容: 有没有办法安装它? 问题答案: 让我们看一下php docker镜像的 官方手册 部分PHP核心扩展 例如,如果您想要一个带有iconv,mcrypt和gd扩展名的PHP- FPM映像,则可以继承您喜欢的基本映像,并编写自己的

  • 我正试图第一次在Win10上用ASL/Ubuntu 20.04 LTS设置一个超级分类账节点。 问题是让DOCKER跑。我知道网上的大多数说明都是针对Ubuntu18.x,但我很固执,想试试20.04 LTS null 版本:19.03.12 API版本:1.40 GO版本:go1.13.10 Git提交:48A66213FE 建成:2020年6月22日15:43:18 OS/arch:windo