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 使用起来差不多。

相关推荐
小锋学长生活大爆炸21 分钟前
【教程】Docker更换存储位置
运维·docker·容器
川石教育4 小时前
测试工程师如何学会Kubernetes(k8s)容器知识
云原生·容器·kubernetes·kubernetes容器·kubernetes教程
Mast Sail6 小时前
windows下authas调试tomcat
java·windows·tomcat·authas
THMAIL6 小时前
mac M芯片运行docker-desktop异常问题
macos·docker·容器
疯狂的挖掘机7 小时前
记一次从windows连接远程Linux系统来控制设备采集数据方法
linux·运维·windows
两点王爷8 小时前
IDEA中springboot项目中连接docker
spring boot·docker·intellij-idea
家庭云计算专家8 小时前
还没用过智能文档编辑器吗?带有AI插件的ONLYOFFICE介绍
服务器·人工智能·docker·容器·编辑器
前进的程序员8 小时前
C++ 在 Windows 和 Linux 平台上的开发差异及常见问题
linux·c++·windows
云手机管家10 小时前
CDN加速对云手机延迟的影响
运维·服务器·网络·容器·智能手机·矩阵·自动化
大笨象、小笨熊10 小时前
【Win32 API】 lstrcpyA()
windows