windows 下 Docker 踩坑

我的开发机是 Windows 11。Windows 早就支持 WSL,也有 Hyper-V 的虚拟化解决方案,当然也能跑 Docker。

不过,我对 Docker 不熟悉,踩了不少坑。

Docker Desktop 无法启动

Docker Desktop 的状态条总是处于黄色。有时候还报错," docker desktop running engine: waiting for the VM setup to be ready: context canceled"。
解决办法:重启 Windows 之后就好了。

是否需要登录 Docker 账号?

先说结论:不需要登录 Docker 账号

看起来 Docker 这外网站确实是被墙了,我其实不太理解。其实墙了没什么用。所以,如果没有 Windows 下的全局翻墙代理,登录 Docker 账号也是挺困难的。

我曾经只给浏览器设代理,可以通过 Docker 账号的认证了,可是 Docker Desktop 还是认证不了。

后来我发现,Docker Desktop 是可以设代理的,而且可以支持 Sock5。在Resources / Proxies 下面,可以 Secure Web Server (HTTPS) 里面,配置 socks5://127.0.0.1:1080

但是,在 pull image 时,这种设置代理的方式会报错,它要求我们使用付费版的 Docker Desktop。折腾到这里,我都要哭了。

怎么办?设置代理。

设置代理的两种方式

方式一:正式设置

在 Docker 的 Settings 的 Docker Engine 标签中,里面有一个 JSON 文件。

这个文件实际上是在 %userprofile%.docker\daemon.json

原始的文件是:

json 复制代码
{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "experimental": false
}

添加 "registry-mirrors",如下:

json 复制代码
{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "experimental": false,
  "registry-mirrors": [
    "https://dockerproxy.cn",
    "https://docker.rainbond.cc",
    "https://docker.udayun.com",
    "https://docker.211678.top",
    "https://hub.geekery.cn",
    "https://ghcr.geekery.cn",
    "https://gcr.geekery.cn",
    "https://quay.geekery.cn"
  ]
}

注意:

"registry-mirrors" 的位置有讲究。我曾经把它放到 "experimental" 之前,Docker Engine 就启动失败。

这时甚至你无法退出 Docker Desktop。所以,你把上面的 json 文件复原之后,还需要耐心地等一会儿 Docker Desktop 退出,再重启试试。

如果还是不行,就手动编辑 %userprofile%.docker\daemon.json 文件,然后重启试试。

如果还是不行,就可以考虑重装 Docker了。

另外,上面这个代理镜像列表在 2024.10.10 是工作的,但是过段时间是不是工作,就不知道了。

方式二:修改拉取镜像的路径

把原来的 docker pull nginx:latest 改成:docker pull hub.geekery.cn/library/nginx:latest ,系统就从代理镜像,这里是 hub.geekery.cn 里拉数据了。

同样,在 Dockerfile 里可以这样搞:

Dockerfile 复制代码
FROM hub.geekery.cn/library/nginx:latest

这里的 library 是一个特殊的命名空间,它代表的是官方镜像。如果是某个用户的镜像就把library替换为镜像的用户名。

目前这么用起来, Windows 下的 Docker 和 Linux 下的 Docker 使用起来差不多。

相关推荐
lichenyang4531 天前
Docker 学习笔记(五):Docker Compose,用一个 YAML 启动前端、后端和 MongoDB
docker
lichenyang4531 天前
Docker 学习笔记(四):Dockerfile,把项目打成自己的镜像
docker·容器
lichenyang4531 天前
Docker 学习笔记(三):Docker 网络、bridge、子网和容器互通
docker·容器
lichenyang4531 天前
Docker 学习笔记(二):docker run 的参数到底在控制什么?
docker·容器
Patrick_Wilson6 天前
从「改个端口」到 502:Next.js on k8s 的容器端口、Service 映射与 env 覆盖
docker·kubernetes·next.js
Suroy6 天前
DockerView-Go:用 Go 写一个终端 Docker 监控工具,顺便做了个 Web 仪表盘
docker
云恒要逆袭6 天前
运行你的第一个Docker容器
后端·docker·容器
宋均浩7 天前
# Docker 镜像瘦身实战:从 1.2G 到 80MB 的五个优化步骤
ci/cd·docker
程序员老赵8 天前
10 分钟部署 OpenCode:Docker 一键安装,浏览器打开就能用 AI 写代码(附完整命令与排错)
docker·容器·ai编程
WangMingHua1118 天前
LM Studio Docker 部署——本地大模型一键启动
docker