我的开发机是 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 使用起来差不多。