在 Windows 上使用 Docker CLI

Apr 28, 2026 · 2461 字

一般来说,在 Windows 上使用 Docker 最便捷的方式是通过 Docker Desktop,它提供了一个图形界面和命令行工具来管理 Docker 容器和镜像。但是 Docker Desktop 是一个商业产品,对于企业来说商业使用需要付费订阅。

另一种方式是安装 WSL 2,然后使用 Docker CLI 连接到虚拟机中的 Docker 引擎。以下是安装和配置 Docker CLI 的步骤:

# 启用必要的 Windows 功能
Enable-WindowsOptionalFeature -Online -FeatureName $("Microsoft-Hyper-V", "Containers") -All
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

winget install Docker.DockerCLI

在虚拟机中安装 Docker 后,需要配置 Docker 守护程序启用远程连接。编辑虚拟机中的 /etc/docker/daemon.json 文件:

{
  "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

然后重启 Docker 服务:

sudo systemctl restart docker

TCP 方式

TCP 方式通过网络连接 Docker 守护程序,需要在 Windows 主机上设置 DOCKER_HOST 环境变量指向虚拟机的 IP 地址和端口。

首先获取虚拟机的 IP 地址。对于 WSL 2,可以在虚拟机内运行:

hostname -I

假设虚拟机的 IP 地址为 172.20.0.100,在 PowerShell 中设置环境变量:

$env:DOCKER_HOST = "tcp://172.20.0.100:2375"

这只是为当前 PowerShell 会话设置环境变量。为了永久设置,使用 setx 命令:

setx DOCKER_HOST "tcp://172.20.0.100:2375"

或者在用户环境变量设置中手动添加 DOCKER_HOST 变量。之后重新启动 PowerShell 或 CMD,就可以使用 Docker CLI 连接到虚拟机中的 Docker 守护程序。

验证连接:

docker version
docker ps

TCP 方式的优点是简单直接,缺点是需要手动维护虚拟机的 IP 地址,尤其是在 WSL 2 中虚拟机重启后 IP 地址可能会变化。为了避免 IP 地址变化的问题,可以为虚拟机分配静态 IP 地址。

管道方式

管道方式通过 Windows 命名管道(Named Pipe)连接 Docker 守护程序,相比 TCP 方式更加稳定,不需要依赖网络配置。

在虚拟机中需要安装 npiperelay 工具,用于将 Docker Socket 转发到 Windows 命名管道:

wget https://github.com/jstarks/npiperelay/releases/download/v0.1/npiperelay_windows_amd64.exe -O /tmp/npiperelay.exe

然后在 Windows 主机上创建一个转发脚本。创建一个 PowerShell 脚本来启动转发:

# docker-relay.ps1
$wslDistro = "Ubuntu"  # 修改为你的 WSL 2 发行版名称
wsl -d $wslDistro npiperelay -ep -l \\.\pipe\docker-engine -s /var/run/docker.sock

运行这个脚本前需要修改执行策略:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

然后在 PowerShell 中运行脚本以启动转发。为了方便使用,可以创建一个后台任务来自动启动转发。使用 Windows 任务计划程序或者 nssm 工具来将脚本注册为服务。

设置 DOCKER_HOST 环境变量使用管道:

$env:DOCKER_HOST = "npipe:////./pipe/docker-engine"

类似地,使用 setx 命令进行永久设置:

setx DOCKER_HOST "npipe:////./pipe/docker-engine"

验证连接:

docker version
docker ps

管道方式的优点是不依赖 IP 地址配置,连接更加稳定。缺点是需要额外的工具支持和后台转发进程。

粤ICP备2025414119号 粤公网安备44030002006951号

© 2026 Saurlax · Powered by Astro