【Docker】windows系统wsl如何操作DOCKER

一、方案一:Docker Desktop + WSL 2(推荐,新手友好)

这是微软官方推荐的方式,Docker Desktop 会将 WSL 2 作为后端运行,相比传统 Hyper-V 模式更轻量、性能更好,且无需手动配置端口、网络等。

1. 前置条件

  • 已安装 WSL 2(参考之前的内容确认:wsl -l -v 显示发行版版本为 2)
  • Windows 10 2004+ / Windows 11(建议最新版本)

2. 安装与配置步骤

步骤 1:下载安装 Docker Desktop
  • 从 Docker 官网 下载 Windows 版本的 Docker Desktop,双击安装(勾选 "Use WSL 2 instead of Hyper-V")。
  • 安装完成后启动 Docker Desktop,首次启动可能需要几分钟初始化。
步骤 2:配置 Docker Desktop 关联 WSL 2
  1. 打开 Docker Desktop → 设置(Settings)→ Resources → WSL Integration。
  2. 勾选 "Enable integration with my default WSL distro",并勾选你要关联的 Linux 发行版(如 Ubuntu)。
  3. 点击 "Apply & Restart" 保存配置,Docker 会自动重启并关联 WSL。
步骤 3:在 WSL 中验证 Docker

打开你的 WSL 终端(如 Ubuntu),执行以下命令,能正常输出版本信息即配置成功:

bash

运行

复制代码
# 检查 Docker 版本
docker --version
# 检查 Docker 服务状态(无需手动启动,由 Docker Desktop 管理)
docker info
# 运行测试容器(经典的 hello-world)
docker run hello-world

3. WSL 中操作 Docker 的常用命令(与原生 Linux 一致)

bash

运行

复制代码
# 拉取镜像
docker pull nginx:latest
# 运行容器(映射端口 8080→80,后台运行)
docker run -d -p 8080:80 --name my-nginx nginx
# 查看运行中的容器
docker ps
# 查看所有容器(包括停止的)
docker ps -a
# 停止容器
docker stop my-nginx
# 启动容器
docker start my-nginx
# 删除容器
docker rm my-nginx
# 删除镜像
docker rmi nginx:latest
# 查看容器日志
docker logs my-nginx

二、方案二:WSL 中安装原生 Docker Engine(进阶)

若不想依赖 Docker Desktop(比如需要离线环境、自定义 Docker 配置),可直接在 WSL 2 的 Linux 发行版中安装原生 Docker Engine,步骤如下:

1. 前置准备(以 Ubuntu 为例)

bash

运行

复制代码
# 更新系统包
sudo apt update && sudo apt upgrade -y
# 安装依赖
sudo apt install -y ca-certificates curl gnupg lsb-release

2. 添加 Docker 官方源

bash

运行

复制代码
# 添加 Docker GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加源到 apt 列表
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

3. 安装 Docker Engine

bash

运行

复制代码
# 更新源并安装 Docker
sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io
# 启动 Docker 服务(WSL 中无 systemd,用 service 命令)
sudo service docker start
# 设置开机自启(WSL 重启后需重新启动,可添加到 ~/.bashrc)
echo "sudo service docker start" >> ~/.bashrc

4. 配置免 sudo 操作 Docker(可选)

bash

运行

复制代码
# 添加当前用户到 docker 组
sudo usermod -aG docker $USER
# 重启终端或执行以下命令生效
newgrp docker
# 验证(无需 sudo 运行)
docker run hello-world

注意事项

  • WSL 2 中没有 systemd,无法用 systemctl 管理 Docker,需用 service docker start/stop/restart。
  • 每次重启 WSL 后,Docker 服务会停止,需重新执行 sudo service docker start(添加到 .bashrc 可自动执行)。

三、WSL + Docker 实用技巧

1. 跨系统文件挂载

WSL 中可直接挂载 Windows 目录到容器,比如将 Windows 的 C:\projects 目录挂载到 Nginx 容器的网页目录:

bash

运行

复制代码
# /mnt/c 对应 Windows 的 C 盘,路径需用 Linux 格式
docker run -d -p 8080:80 -v /mnt/c/projects:/usr/share/nginx/html --name my-nginx nginx

2. 端口访问

  • WSL 中运行的 Docker 容器,Windows 可直接通过 localhost:端口 访问(如 localhost:8080 访问上面的 Nginx)。
  • 其他设备访问需确保 Windows 防火墙放行对应端口。

3. 镜像 / 容器数据持久化

  • 建议将 Docker 镜像、容器数据存储在 WSL 的 Linux 目录(如 /home/你的用户名/docker),而非 /mnt/c 等 Windows 目录,避免 IO 性能损耗。

四、常见问题排查

  1. WSL 中执行 docker 命令提示 "permission denied"

    • 原因:未将用户加入 docker 组,或 Docker 服务未启动。
    • 解决:执行 sudo service docker start 启动服务,或按方案二步骤 4 配置免 sudo。
  2. Docker Desktop 提示 "WSL 2 is not installed"

    • 原因:WSL 版本未切换到 2,或虚拟机平台未启用。
    • 解决:执行 wsl --set-default-version 2,并确保 Windows 功能中勾选 "虚拟机平台"。
  3. 容器端口无法访问

    • 检查容器是否正常运行:docker ps。
    • 检查 Windows 防火墙是否放行对应端口。
    • WSL 2 中避免用 0.0.0.0 绑定端口,直接用容器默认配置即可。

总结

  1. 新手优先选 Docker Desktop + WSL 2:无需手动配置服务,Docker 由 Desktop 管理,开箱即用,兼容所有 Docker 命令。
  2. 进阶场景用原生 Docker Engine :适合需要自定义 Docker 配置、脱离 Windows 桌面环境的场景,注意 WSL 无 systemd 需用 service 管理服务。
  3. 核心技巧 :WSL 中操作 Docker 时,优先使用 Linux 本地目录挂载容器,避免跨 Windows 目录导致 IO 性能下降,端口访问直接用 localhost 即可。
相关推荐
AKAMAI1 天前
随着瓦尔·基尔默的AI分身诞生,生成式AI是否正在将好莱坞推向边缘?
人工智能·云原生·云计算
探索云原生1 天前
一个 Deployment 就能跑 vLLM,为什么还需要 KServe?
docker·ai·云原生·kubernetes·go
分布式存储与RustFS7 天前
MinIO 官方 Docker 镜像被移除:依赖它的项目该怎么办
docker·云原生·devops·对象存储·minio·分布式存储
codeejun7 天前
每日一Go·MySQL-5、锁机制全解析
云原生·golang
张洛闻Eren7 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
不吃香菜kkk、7 天前
CI/CD(GitOps)学习与部署手册
运维·云原生·容器·kubernetes·云计算·jenkins·argocd
ChaITSimpleLove7 天前
云原生性能对决:JDK21虚拟线程+GraalVM vs .NET10/11 技术栈深度对比
微服务·云原生·serverless·graalvm native·native aot·runtime async·.net11/java21
春天花会开1318 天前
Supabase 自部署 Edge Functions 超时从 60s 延长到 360s 完整复盘
运维·云原生
ysu_03148 天前
【2026】K8s GPU调度空占怎么解?Kueue与Volcano Gang配置
云原生·kubernetes·gpu算力·volcano·ai基础设施·kueue·gang scheduling
天天喝旺仔9 天前
分布式服务容错实战:用 Sentinel 实现限流、熔断与降级
分布式·微服务·云原生·sentinel