主页>技术社区>编程问答

如何在WSL2上公开Docker TCP套接字? 安装了WSL的Docker,而不是Docker Desktop export DOCKER_HOST = tcp://0.0.0.0:2375 /lib/systemd/system/docker.service> ExecStart / etc / default / docker> DOCKER_OPTS 1 /etc/docker/daemon.json 2 sudo service docker

eIT.com.cn 2023/3/15 9:21:27 阅读 4 次

打印


如何解决如何在WSL2上公开Docker TCP套接字? 安装了WSL的Docker,而不是Docker Desktop export DOCKER_HOST = tcp://0.0.0.0:2375 /lib/systemd/system/docker.service> ExecStart / etc / default / docker> DOCKER_OPTS 1 /etc/docker/daemon.json 2 sudo service docker ?

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

export DOCKER_HOST = tcp://0.0.0.0:2375

$ export DOCKER_HOST=tcp://0.0.0.0:2375
$ sudo service docker restart
$ docker context ls
NAMEDESCRIPTION            DOCKER ENDPOINT      KUBERNETES ENDPOINT   TOR
default *           Current DOCKER_HOST based conuration   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 -- /var/run/dockerck http:/localhost/version
{"Platform":{"Name":"Docker Engine - Comy"},"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":"","Version":"1.0.0-rc10","Details":{"GitCommit":"dc9208a3303feef5b3839f4323d9beb36df0a9dd"}},{"Name":"docker-init","Version":"0.18.0","Details":{"GitCommit":"fec3683"}}],"ApiVersion":"1.40","Os":"linux","BuildTime":"2020-06-01T09:10:54.000000000+00:00"}
$ curl http://localhost:2375/version
curl: (7)  to connect to localhost port 2375: Connection refused

我希望最终的命令给出类似{"Version":"17.05.0-ce","ApiVersion":"...}的结果,但是连接被拒绝。确实,如果我尝试通过Windows主机Pycharm连接,它将拒绝连接。我还看到很多教程/ SO帖子都说不要使用这种DOCKER_HOST,但是我不确定为什么。

/lib/syd/sy/docker.service> ExecStart

对于每个,,,我用/lib/syd/sy/docker.service编辑了ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerdck -H tcp://0.0.0.0:2375。但是当我尝试syctl daemon-reload时会出错; WSL2syctl命令()。

$ sudo syctl daemon-reload
Sy has not been booted with syd as init sy (PID 1). Can't operate.

我还尝试重新启动WSL2(Powershell wsl --shutdown,重新打开WSL2),以防docker-daemon捡起那些变化,但没有雪茄。

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

/ etc / default / docker> DOCKER_OPTS

对于每个,我先用/etc/default/docker然后用DOCKER_OPTS="-H unix:// -H tcp://0.0.0.0:2375"编辑了sudo service docker restart。同一连接拒绝。

解决方法

快速修复(不安全)

来自

1。 /etc/docker/daemon.json

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

2。 sudo service docker restart


长效(TLS)

TLS支持:,。如果要在服务器上设置Docker,建议您关注该博客文章。对我来说,我只想要WSL2中的Docker,Windows可以访问的套接字(PyCharm)和TLS安全。因此,我的修改使用了~/.dockerlocalhost(而不是根文件夹和FQDN)。这是我的步骤:

1。 /etc/docker/daemon.json

"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 -v 0444 x也需要访问“证书文件夹”。

2。证书

$ 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错误(或)

3。 sudo service docker restart

4。 PyCharm(可选)

  1. 文件>设置>构建,执行,部署> Docker
    1. 添加Docker(或单击现有)> [x] TCP套接字
    2. 引擎API URL:https://localhost:2376
    3. 证书文件夹:\\wsl$\Ubuntu-18.04\home\lefnire\.docker\certs
  2. 文件>设置>项目:[my-proj]> Python解释器
    1. 下拉菜单>显示全部...>添加> Docker





相关内容


热门栏目


特别声明


最新资讯
热讯排行



合作媒体友情链接
生活常识小贴士 软件开发教程 智慧城市生活网 息县通生活服务[移动版] 息县商圈[移动版] 美食菜谱
健康养生 法律知识 科技频道 电影影讯 留学考研学习 星座生肖|解梦说梦




关于我们 | 联系我们 | 合作媒体 | 使用条款 | 隐私权声明 | 版权声明

      Copyright © 2023 eIT.com.cn. All Rights Reserved. 豫ICP备2022012332号