【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 即可。
相关推荐
Hns.2 分钟前
自建docker镜像仓库
docker·容器·eureka
重庆小透明10 分钟前
微服务,不仅仅是“小服务”
java·后端·spring cloud·微服务·云原生·架构
柒.梧.1 小时前
从0到1理解K8s:为什么用、怎么设计、如何搭建
云原生·容器·kubernetes
智在碧得2 小时前
弹性智变!Knative+ACK 构建云原生伸缩架构,解锁降本稳流新范式
云原生·架构·knative
IT从业者张某某2 小时前
Docker部署Hadoop-01-Docker安装
hadoop·docker·eureka
小二·2 小时前
Go 语言系统编程与云原生开发实战(第36篇)
开发语言·云原生·golang
切糕师学AI2 小时前
Kubernetes CRD(自定义资源,CustomResourceDefinition)详解
云原生·容器·kubernetes
一个向上的运维者3 小时前
从 K8s Device Plugin 到 Volcano 多元算力管理:GPU 显存共享实战与深度解析
云原生·容器·kubernetes
merlin-mm3 小时前
云平台构建 RDMA高性能网络
网络·云原生·容器·kubernetes
上海云盾安全满满3 小时前
云原生环境该怎样解决网络安全问题
安全·web安全·云原生