window连接本地虚拟机或远程linuxdocker

127 阅读3分钟

🚀 从 Windows 远程连接 Linux Docker Daemon 全过程实录

🧭 背景

在本地开发中,我们常常使用 Docker Desktop for Windows 来运行容器。
但在一些场景下,我们希望:

  • Docker 服务部署在远程 Linux 主机(如虚拟机、云服务器等);
  • Windows 客户端(CMD/PowerShell) 直接控制远程 Docker 实例。

这就需要通过 TCP Socket 远程访问 Docker Daemon(2375 端口)


🧩 一、Linux 端配置

1️⃣ 编辑 Docker 服务配置文件

Docker 默认只监听本地 UNIX Socket /var/run/docker.sock
需要通过 systemd 添加 TCP 监听端口。

执行:

sudo systemctl edit docker.service

这会创建一个 override 文件(路径通常为):

/etc/systemd/system/docker.service.d/override.conf

在文件中写入:

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375

✅ 注意:

  • 第一行 ExecStart= 是用来清空原有的启动命令,否则会报错。
  • 第二行才是新的启动参数,开放本地 fd:// 与远程 2375。

2️⃣ 重载并重启 Docker 服务

sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl restart docker

3️⃣ 验证是否成功监听 2375 端口

sudo ss -lntp | grep 2375

输出应类似:

LISTEN 0 128 0.0.0.0:2375  *:*  users:(("dockerd",pid=1234,fd=3))

4️⃣ 检查防火墙或云安全组

确保 2375 端口对外开放
如果是虚拟机(如 VMware / VirtualBox),需要:

  • 网络模式改为 桥接模式(Bridged Adapter)
  • 保证宿主机(Windows)能直接访问虚拟机 IP。

💻 二、Windows 端连接

⚠️ PowerShell 与 CMD 的区别

❌ 错误写法(PowerShell中无效)

set DOCKER_HOST=tcp://192.168.247.130:2375

PowerShell 不识别 set,此命令只在 CMD 中有效。

✅ 正确写法(PowerShell)

$env:DOCKER_HOST = "tcp://192.168.247.130:2375"
docker ps

✅ CMD 版本写法

set DOCKER_HOST=tcp://192.168.247.130:2375
docker ps

🧩 检查网络连通性(可选)

Test-NetConnection 192.168.247.130 -Port 2375

若输出 TcpTestSucceeded : True,说明网络连通。


🚀 测试连接

执行:

docker ps

若能看到远程容器列表,说明连接成功 ✅


🌍 永久设置(可选)

让 Windows 每次启动都能连接远程 Docker:

setx DOCKER_HOST "tcp://192.168.247.130:2375"

重新打开 CMD 或 PowerShell 即可生效。


⚙️ 三、常见问题与排查记录

问题现象可能原因解决方案
The system cannot find the file specifiedPowerShell中使用了 set 导致变量未生效改用 $env:DOCKER_HOST=...
Cannot connect to the Docker daemonLinux 端未开放 2375 或防火墙拦截检查 ss -lntp 输出和防火墙规则
override.conf 文件保存时文件名奇怪(如 .##override.confxxxx正在编辑时的临时文件,正常现象不用理会,保存退出后 systemd 会生成正式文件
docker ps 卡死或超时网络不通、虚拟机网卡非桥接模式修改 VM 网络为桥接模式,重启 Docker
Linux 端配置无效未执行 daemon-reload必须执行 sudo systemctl daemon-reload

🧠 四、技术要点总结

  1. systemd override 机制

    • /etc/systemd/system/docker.service.d/override.conf 可以重定义默认启动参数,而无需修改主配置文件。
    • ExecStart= 用于清空原参数,必须成对出现。
  2. Docker 多监听端口机制

    • -H fd://:保留本地 socket(供本机 CLI 使用)
    • -H tcp://0.0.0.0:2375:开启远程访问。
  3. 2375 端口风险提示

    • 该端口默认不安全(未启用 TLS 认证)。
    • 如果是公网服务器,必须通过防火墙或 SSH 隧道限制访问
  4. PowerShell 环境变量机制

    • 临时变量:$env:DOCKER_HOST="tcp://..."
    • 永久变量:setx DOCKER_HOST "tcp://..."
  5. 虚拟机网络配置

    • 桥接模式能让宿主机与虚拟机互通;
    • NAT 模式则需端口转发。

🧾 五、最终验证成果

在 Windows CMD 中执行:

set DOCKER_HOST=tcp://192.168.247.130:2375
docker ps

成功输出来自 Linux 主机的容器列表 ✅
远程 Docker 环境连接成功 🎉


📚 六、可扩展方向

  • 使用 TLS 认证 安全地远程访问 Docker(tcp://0.0.0.0:2376

  • 通过 Docker Context 管理多个远程主机:

    docker context create remote-linux --docker "host=tcp://192.168.247.130:2375"
    docker context use remote-linux
    docker ps