从 Windows 主机连接到 wsl2 Ubuntu docker

Connect to wsl2 Ubuntu docker from Windows host

我有 Windows 10 并安装了 Docker Desktop。在他们更改商业使用条款后,我决定删除 Docker 桌面安装并仅使用 docker 引擎本身(因为我没有使用 GUI)。我已经在 WSL 2 下的 Ubuntu 上安装了 docker,它工作正常:

localusr@MACHINE:~$ docker context ls
NAME            DESCRIPTION                               DOCKER ENDPOINT                             KUBERNETES ENDPOINT   ORCHESTRATOR
default *       Current DOCKER_HOST based configuration   unix:///mnt/wsl/shared-docker/docker.sock                         swarm
desktop-linux                                             npipe:////./pipe/dockerDesktopLinuxEngine
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.
localusr@MACHINE:~$ docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

localusr@MACHINE:~$

现在我想让我的 JetBrains IDE 连接到 Docker 引擎。我有以下选择:

那么配置连接的最佳方式是什么?我可以通过某种方式“创建一个 link”来通过管道使用 Docker for Windows 选项吗?似乎它只是试图连接到 npipe:////./pipe/docker_engine。或者我可以公开 TCP/SSH 个端口。

我是配置新手 docker 所以请解释我可以使用哪个选项。

免责声明:不是专家,只是遇到了完全相同的问题并这样解决了。

默认启动 docker 守护进程,仅在 unix 套接字上公开。
据我所知,没有办法在 intellij 中直接指定 unix 套接字,而是 windows 部分需要一些解决方法,我不知道这会有多少工作。

您可以将守护程序配置为也通过 tcp 套接字公开自身,例如您在 docker 桌面 (tcp://localhost:2375) 中使用的相同 tcp 套接字。
设置完成后,您可以再次配置 intellij 以通过 tcp 与 docker 守护程序进行交互。
请注意将您的 docker 守护程序暴露在网络中所涉及的安全问题。

  1. 确保 docker 已安装并正常工作(即 docker run hello-world
  2. 创建文件/etc/docker/daemon.json
    和: { "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"] }
    请注意,unix 套接字仍用于 ubuntu
  3. 中的任何 docker 操作
  4. 重启docker服务,使配置生效:sudo service docker restart
  5. 验证 docker 是 stiu

使用过:
wsl 2,ubuntu20.04,windows10.0.19043
docker 按照以下方式安装:https://docs.docker.com/engine/install/ubuntu/
警告:systemd 目前不能在 wsl2 上完全开箱即用,因此某些选项可能不可用。

由于 wsl2 处理 windows 和 wsl2 之间文件传输的方式,这个新工作流程:“ubuntu 中的 docker”可能与您以前的体验有很大不同。
您可能需要考虑通过某种方式将所有文件移动到 windows 上的 ubuntu 或 运行 docker。