配置DOCKER DESKTOP(win11)
前言
在win11系统上配置DOCKER DESKTOP遇到了不少问题,不过磕磕绊绊的总算配置成功了,现在将我的配置过程记录下来。
一. 确认虚拟化已启用
1.1 按 Ctrl + Shift + Esc
打开任务管理器 → 切换到 性能 标签。
1.2 查看 CPU 部分,确认 虚拟化 显示为 “已启用”。
(若显示“已禁用”,需进入 BIOS 开启。)
二. 启用 WSL 2
在 **PowerShell(管理员)**中运行以下命令,确认输出为 WSL 2
:
wsl --status # 查看 WSL 版本状态
wsl --set-default-version 2 # 设置 WSL 2 为默认版本
由上图可以看到我现在的版本是WSL2
对于默认分发
-
Docker Desktop 会默认生成一个名为
docker-desktop
的轻量级发行版,专门用于运行 Docker 守护进程(无需用户干预)。-
可通过以下命令查看:
wsl --list -v
NAME STATE VERSION docker-desktop Running 2 docker-desktop-data Running 2
-
-
用户发行版可选:
如果你想在 WSL 2 中直接运行 Linux 命令或开发,可以后续安装其他发行版(如 Ubuntu),但这不是 Docker 运行的必要条件。
相关问题:
没有 Linux 发行版会影响 Docker 使用吗?
- 不会。Docker 容器本身是独立于发行版的,所有容器操作(如
docker run
)均通过 Docker Desktop 的 WSL 2 后端处理。
关于 wsl --status
指令运行失败的一种情况
PS C:\Users\Administrator> wsl --status
默认版本:2
适用于 Linux 的 Windows 子系统内核可以使用“wsl --update”手动更新,但由于你的系统设置,无法进行自动更新。
若要接收自动内核更新,请启用 Windows 更新设置:“在更新 Windows 时接收其他 Microsoft 产品的更新”。
有关详细信息,请访问https://aka.ms/wsl2kernel。
Windows 更新已暂停。
未找到 WSL 2 内核文件。若要更新或恢复内核,请运行“wsl --update”。
如果通过上述更新指令无法下载更新,建议去官网https://aka.ms/wsl2kernel手动下载最新的WSL内核文件
三. 安装 Docker Desktop
- 从官网下载安装包:https://www.docker.com/products/docker-desktop/
- 运行安装程序,勾选 “Use WSL 2 based engine”(即使没有发行版也要勾选)。
- 完成安装并启动 Docker Desktop。
相关问题:
从官网下载太慢怎么办?
- 可以去找找国内的镜像,不过我找到的镜像版本太老,下下来后无法正常使用,最后还是去官网下载了
- 最好别用校园网,我用校园网需要下一天,用流量的话大概需要十几分钟
启动失败怎么办?
如上图,我在启动 Docker Desktop提示WSL2内核更新未安装,导致系统缺少 WSL 2 Linux 内核更新包,所以我们需要去它所提示的网址https://aka.ms/wsl2kernel, 下载WSL2更新包,注意根据自己的电脑版本下载对应的更新包(x64 或 ARM64):
下载的更新包双击打开,系统会自动更新WSL2内核。
验证安装
打开 PowerShell 或 CMD,运行:
docker --version
docker run hello-world
如果看到 Hello from Docker!
,说明 Docker 已通过 WSL 2 正常运行。
四. DOCKER DESKTOP主要功能
DOCKER DESKTOP版本:
DOCKER DESKTOP主界面:
Containers(容器)
- 功能:管理所有运行中的容器实例。
- 主要操作:
- 查看容器状态(运行/停止/崩溃)。
- 启动/停止/删除容器。
- 查看容器日志和资源占用(CPU/内存)。
- 界面说明:
Search
:搜索容器(按名称或ID)。Port(s)
:查看容器端口映射。Show charts
:显示资源使用图表。
Images(镜像)
- 功能:管理本地存储的 Docker 镜像。
- 主要操作:
- 拉取(Pull)新镜像。
- 删除(Remove)无用镜像。
- 构建(Build)自定义镜像(需 Dockerfile)。
- 界面说明:
- 显示镜像大小、创建时间和标签。
Volumes(数据卷)
- 功能:管理持久化存储卷。
- 主要操作:
- 创建/删除数据卷。
- 查看卷的存储路径(宿主机目录)。
- 用途:
- 防止容器删除后数据丢失。
Builds(构建记录)
- 功能:查看通过 Dockerfile 构建镜像的历史记录。
- 主要操作:
- 重新构建失败的镜像。
- 查看构建日志。
Docker Hub
- 功能:连接 Docker 官方镜像仓库。
- 主要操作:
- 搜索/下载公共镜像(如
nginx
、mysql
)。 - 登录账号管理个人镜像。
- 搜索/下载公共镜像(如
Docker Scout(安全扫描)
- 功能:镜像漏洞扫描与安全分析。
- 主要操作:
- 检查镜像中的安全风险。
- 获取修复建议(如升级基础镜像)。
Extensions(扩展插件)
- 功能:安装第三方工具增强 Docker 功能。
- 常用插件:
Portainer
:图形化管理容器。Trivy
:镜像漏洞扫描。RedisInsight
:Redis 数据库管理。
相关问题:
DOCKER DESKTOP频繁弹窗
- 在使用DOCKER DESKTOP时,它总是过一会就跳出至当前页面,比如在浏览器中打字搜索时,打字打到一半,DOCKER DESKTOP会突然弹出变为系统主界面,导致我后续打的字都打到DOCKER DESKTOP里了。
- 我的解决方案是注册一个账户登录DOCKER DESKTOP就好了。
五. 创建示例
5.1 载入国内镜像
- 由于物理距离和网络带宽的限制,从国外的服务器下载大文件(如操作系统镜像、软件包等)时,可能会遇到速度较慢的情况。
- 国内的镜像站点一般会与用户距离较近,减少了跨境网络传输的延迟和带宽瓶颈,从而提高了下载速度。
方法一:
通过DOCKER DESKTOP的可视化界面,进入设置界面->选择Docker Engine
->在右侧json格式框内做出如下修改(增加国内镜像节点):
"registry-mirrors": [
"https://lispy.org",
"https://docker.imgdb.de",
"https://docker.hlmirror.com",
"https://docker.1ms.run",
"https://docker.1ms.run",
"https://docker.xuanyuan.me"
]
修改后选择右下角Apply&restart
保存修改。
方法二:
通过修改DOCKER DESKTOP的配置文件daemon.json
,增加国内镜像(不同版本可能配置文件所在位置不同,下面是我的配置文件所在路径):
通过记事本将方法一中的国内镜像节点写入该配置文件,保存后重启docker服务。
验证镜像节点是否挂载:
PS C:\Windows\system32> docker info | Select-String "Registry Mirrors" -Context 0,1
WARNING: No blkio throttle.read_bps_device support
WARNING: No blkio throttle.write_bps_device support
WARNING: No blkio throttle.read_iops_device support
WARNING: No blkio throttle.write_iops_device support
WARNING: DOCKER_INSECURE_NO_IPTABLES_RAW is set
WARNING: daemon is not using the default seccomp profile
> Registry Mirrors:
https://lispy.org
上面的警告对于DOCKER DESKTOP的基本功能没有影响,只要Registry Mirrors:下面能显示出我们增加的一个镜像节点就说明它已经成功挂载
或者通过指令docker info来查看docker的所有配置信息
如果从中找到前面配置的镜像节点,说明挂载成功
Registry Mirrors:
https://lispy.org/
https://docker.imgdb.de/
https://docker.hlmirror.com/
https://docker.1ms.run/
https://docker.xuanyuan.me/
ps:镜像节点可能失效,若下载镜像失败,记得更新镜像节点。
相关问题:
- 使用阿里云镜像下载postgres sql镜像时出现连接超时,请求失败的问题
PS C:\Windows\system32> docker pull postgres
>>
Using default tag: latest
Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded
这是因为国内有些镜像节点没有所下载的镜像,拉取不了,最后走国外的官方节点下载,结果因为网络限制下载失败。
解决方法就是更换国内其他的镜像节点下载。
5.2 建立一个postgres容器(在PowerShell(管理员)窗口)
拉取最新的postgres镜像:
PS C:\Windows\system32> docker pull postgres:latest // (可选)指定版本,如 `postgres:14`
>>
Using default tag: latest
latest: Pulling from library/postgres
latest: Pulling from library/postgres
8a628cdd7ccc: Pull complete
e4847368ad17: Pull complete
97cdd47d9131: Pull complete
2817206b0512: Pull complete
3a6f8814136c: Pull complete
07db60713289: Pull complete
0c942aac37b1: Pull complete
8c63b71925de: Pull complete
97f28320a07a: Pull complete
2a08aad74366: Pull complete
6cea4d95608f: Pull complete
c1b7de8085d1: Pull complete
f15c43cffa70: Pull complete
6948dc7760c1: Pull complete
Digest: sha256:fe3f571d128e8efadcd8b2fde0e2b73ebab6dbec33f6bfe69d98c682c7d8f7bd
Status: Downloaded newer image for postgres:latest
docker.io/library/postgres:latest
What's next:
View a summary of image vulnerabilities and recommendations → docker scout quickview postgres
以上结果表示从国内镜像节点完整下载了postgres镜像
启动 PostgreSQL 容器
PS C:\Windows\system32> docker run --name postgres-container -e POSTGRES_USER=myuser -e POSTGRES_PASSWORD=mypassword -e POSTGRES_DB=mydb -p 5432:5432 -d postgres
>>
856c795cce4843f5d79d3661ac0f20dbdc71bf0d0fa9299c713b73b53edd3eb9
以上结果表示已经成功创建(自动)并运行了 PostgreSQL 容器,并且获得了容器 ID 856c795cce4843f5d79d3661ac0f20dbdc71bf0d0fa9299c713b73b53edd3eb9。这个 ID 表示容器正在后台运行。
--name my-postgres
:将容器命名为 “postgres-container”。-e POSTGRES_USER
:数据库用户名(默认postgres
)。-e POSTGRES_PASSWORD
:数据库密码(必须设置)。-e POSTGRES_DB
:初始数据库名称(可选)。-p 5432:5432
:将主机的 5432 端口映射到容器的 5432 端口(PostgreSQL 的默认端口)。-d
:让容器在后台运行。
连接 PostgreSQL 数据库:
PS C:\Windows\system32> docker exec -it postgres-container psql -U myuser -d mydb
psql (17.4 (Debian 17.4-1.pgdg120+2))
Type "help" for help.
mydb=#
psql (17.4 (Debian 17.4-1.pgdg120+2)) 表示你正在使用 PostgreSQL 17.4 版本的命令行客户端(psql),这是 PostgreSQL 数据库的一个客户端工具,用于执行 SQL 查询和管理数据库。
以上结果说明已经成功连接到了 PostgreSQL 数据库,并且现在位于 mydb 数据库的命令行界面了,可以开始执行 SQL 查询了。
以下是一些基础的 PostgreSQL指令:
1. 查看当前数据库中的表:
你可以使用以下命令来列出当前数据库中的所有表:
\dt
2. 创建新的表:
你可以创建一个新表。例如,创建一个名为 users 的表:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
);
3. 插入数据:
你可以向 users 表中插入一些数据:
INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');
INSERT INTO users (name, email) VALUES ('Bob', 'bob@example.com');
4. 查询数据:
执行查询以查看 users 表中的数据:
SELECT * FROM users;
5. 退出 psql:
如果你想退出 PostgreSQL 命令行界面,可以输入:
\q
ps:上述连接指令没有输入密码就连接上数据库 ,可能是因为容器内的 PostgreSQL 配置默认使用了 trust
认证方式,或者是本地连接的认证配置没有强制要求密码。你可以通过修改 pg_hba.conf
配置文件来更改这一行为,强制要求密码。
在DOCKER DESKTOP中可以利用可视化界面管理容器: