您好!要在Windows系统上的Rancher Desktop中修改Docker镜像源(即设置registry mirror),您需要根据Rancher Desktop使用的容器运行时(containerd或dockerd)进行配置。用户提到“allowed-image”没有效果,这是因为“Allowed Images”功能用于限制可以拉取哪些镜像,而不是配置镜像加速器。
以下是针对Windows系统在Rancher Desktop中配置Docker镜像源的步骤:
首先,明确您的问题:“allowed-image”不是用来设置镜像源的
Rancher Desktop中的“Allowed Images”功能(通常在 Preferences -> Container Engine -> Allowed Images 中找到)是用来定义一个允许拉取和推送的镜像列表的规则,例如,只允许从您组织或特定的受信任的仓库中获取镜像。它不是用来设置镜像加速器的。您需要修改底层的容器运行时配置来实现镜像加速。
Rancher Desktop默认使用 containerd
作为容器运行时。
对于 containerd
,镜像源的配置通常通过一个名为 registries.yaml
的文件来实现。在Rancher Desktop中,推荐使用预配脚本 (Provisioning Scripts) 来修改或创建这个文件。
方法一:使用预配脚本 (推荐给 containerd
用户)
-
找到或创建预配脚本目录:
- 在Windows上,Rancher Desktop的预配脚本目录通常位于:
%LOCALAPPDATA%\rancher-desktop\provisioning
- 一个完整的路径示例可能是:
C:\Users\您的用户名\AppData\Local\rancher-desktop\provisioning
- 如果此目录不存在,请手动创建它。
- 在Windows上,Rancher Desktop的预配脚本目录通常位于:
-
创建预配脚本文件:
- 在该目录中创建一个以
.start
结尾的脚本文件,例如mirror-config.start
。 - 这个脚本会在Rancher Desktop启动其Kubernetes后端(如果启用)或容器运行时之前执行。
- 在该目录中创建一个以
-
编辑脚本文件内容:
- 使用文本编辑器打开您创建的
.start
文件,并添加以下内容的脚本。这个脚本会在Rancher Desktop的WSL2虚拟机内部创建或修改/etc/rancher/k3s/registries.yaml
文件。
#!/bin/sh set -eux # 确保目标目录存在 mkdir -p /etc/rancher/k3s # 创建或覆盖 registries.yaml 文件 # 将 <your-mirror-url> 替换为您的镜像加速器地址,例如 https://docker.m.daocloud.io 或 https://registry.cn-hangzhou.aliyuncs.com # 您可以添加多个镜像源,containerd 会依次尝试 cat <<EOF > /etc/rancher/k3s/registries.yaml mirrors: "docker.io": endpoint: - "https://docker.m.daocloud.io" # 示例镜像源1 - "https://hub-mirror.c.163.com" # 示例镜像源2 # 如果您有其他私有仓库或需要加速的仓库,也可以在这里配置 # "my.private.registry:5000": # endpoint: # - "http://my.private.registry:5000" EOF echo "Registries.yaml configured for containerd."
重要提示:
- 将脚本中的
"https://docker.m.daocloud.io"
和"https://hub-mirror.c.163.com"
替换为您实际想要使用的镜像加速器地址。 docker.io
是Docker Hub的官方地址。上述配置意味着当拉取例如nginx
(实际是docker.io/library/nginx
) 镜像时,会尝试通过您提供的endpoint
地址来下载。- 您可以为不同的上游仓库配置不同的镜像,例如
k8s.gcr.io
等。
- 使用文本编辑器打开您创建的
-
重启 Rancher Desktop:
- 关闭并重新启动Rancher Desktop,以使预配脚本生效。
-
验证配置 (可选但推荐):
- Rancher Desktop启动后,您可以通过
rdctl shell
进入Rancher Desktop的WSL2虚拟机内部。 PowerShellrdctl shell
- 然后查看
registries.yaml
文件的内容: Bashcat /etc/rancher/k3s/registries.yaml
- 或者,如果您想检查
containerd
的最终配置(它会合并registries.yaml
的信息): Bashsudo containerd config dump | grep -A 5 "plugins.\"io.containerd.grpc.v1.cri\".registry.mirrors"
- 尝试拉取一个镜像,如
nerdctl pull nginx
(如果您使用containerd
命令行) 或docker pull nginx
(如果Rancher Desktop的Docker CLI使用的是containerd
后端),观察拉取速度或日志信息是否表明镜像源已生效。
- Rancher Desktop启动后,您可以通过
方法二:如果您将 Rancher Desktop 切换到了 dockerd (moby)
作为容器运行时
如果您在 Rancher Desktop 的设置中 (Preferences -> Kubernetes Settings -> Container Runtime) 选择了 dockerd (moby)
,那么您需要修改Docker守护进程的配置文件 (daemon.json
)。
-
通过
PowerShellrdctl shell
进入 Rancher Desktop 的 WSL2 实例:rdctl shell
-
编辑或创建
daemon.json
文件:- 在WSL2环境中,Docker的配置文件通常位于
/etc/docker/daemon.json
。 - 使用文本编辑器(如
vi
或nano
)打开或创建该文件: Bashsudo vi /etc/docker/daemon.json
- 在WSL2环境中,Docker的配置文件通常位于
-
添加镜像源配置:
- 在
daemon.json
文件中添加以下内容。如果文件已存在内容,请确保这是一个有效的JSON格式,并在合适的位置添加registry-mirrors
键。
{ "registry-mirrors": [ "https://docker.m.daocloud.io", // 示例镜像源1 "https://hub-mirror.c.163.com" // 示例镜像源2 // 添加更多镜像源,按需替换 ] // 如果已有其他配置,请确保JSON格式正确,例如: // "exec-opts": ["native.cgroupdriver=systemd"], // "log-driver": "json-file", // "log-opts": { // "max-size": "100m" // } }
- 将
"https://docker.m.daocloud.io"
等替换为您要使用的镜像地址。
- 在
-
保存文件并退出编辑器。
-
重启 Rancher Desktop:
- 完全关闭并重新启动Rancher Desktop以使更改生效。有时,仅重启
dockerd
服务可能不够,重启整个Rancher Desktop能确保配置被加载。
- 完全关闭并重新启动Rancher Desktop以使更改生效。有时,仅重启
重要注意事项:
- 预配脚本的持久性:通过
%LOCALAPPDATA%\rancher-desktop\provisioning
目录下的.start
脚本配置registries.yaml
(针对containerd) 是Rancher Desktop推荐的持久化自定义配置的方式。直接在WSL2虚拟机内部修改/etc/rancher/k3s/registries.yaml
或/etc/docker/daemon.json
可能在Rancher Desktop更新或恢复出厂设置时丢失。 - WSL2 网络:确保您的Windows防火墙或任何网络安全软件没有阻止Rancher Desktop的WSL2虚拟机访问您配置的镜像源地址。
- 镜像源的有效性:请确保您使用的镜像源地址是有效的,并且能够提供您需要的镜像。
- Rancher Desktop 版本:具体的配置路径和行为可能因Rancher Desktop的版本略有不同。建议查阅您所使用版本的官方文档以获取最准确的信息。
总结一下,对于Windows上的Rancher Desktop,如果您使用默认的 containerd
运行时,请优先考虑使用预配脚本在 %LOCALAPPDATA%\rancher-desktop\provisioning
目录创建 .start
文件来配置 /etc/rancher/k3s/registries.yaml
。如果您切换到了 dockerd
,则需要通过 rdctl shell
进入WSL2环境修改 /etc/docker/daemon.json
,或者也可以研究是否能通过预配脚本来修改 daemon.json
(一些用户报告可以通过预配脚本修改 /etc/conf.d/docker
文件来传递 DOCKER_OPTS
,但这可能更复杂)。
请先尝试使用预配脚本为 containerd
配置镜像源。如果问题依旧,请提供您Rancher Desktop的版本和当前选择的容器运行时,以便进一步协助。