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

相关推荐
gxhlh6 小时前
局域网中 Windows 与 Mac 互相远程连接的最佳方案
windows·macos
huosenbulusi9 小时前
helm推送到harbor私有库--http: server gave HTTP response to HTTPS client
云原生·容器·k8s
不会飞的小龙人9 小时前
Docker Compose创建镜像服务
linux·运维·docker·容器·镜像
不会飞的小龙人9 小时前
Docker基础安装与使用
linux·运维·docker·容器
Mbblovey9 小时前
Picsart美易照片编辑器和视频编辑器
网络·windows·软件构建·需求分析·软件需求
张3蜂10 小时前
docker Ubuntu实战
数据库·ubuntu·docker
笔耕不辍cj13 小时前
两两交换链表中的节点
数据结构·windows·链表
Ase5gqe14 小时前
Windows 配置 Tomcat环境
java·windows·tomcat
元气满满的热码式14 小时前
K8S中Service详解(三)
云原生·容器·kubernetes
染诗14 小时前
docker部署flask项目后,请求时总是报拒绝连接错误
docker·容器·flask