1. 简介
Docker 仓库(Registry)用于存储和分发 Docker 镜像,通常使用 TLS 加密通信。但在某些内部测试或开发环境中,我们可能会遇到没有启用 TLS 的仓库,这种仓库通常被称为 不安全的仓库(Insecure Registry)。
本文将介绍如何配置 Docker 以从不安全的仓库中拉取和推送镜像。我们会分别介绍 Linux 和 Windows 系统下的配置方法,并演示 pull 和 push 操作。
2. 在 Linux 环境中配置不安全仓库
Docker 本身支持与不安全仓库交互,但需要显式配置 Docker Daemon。
2.1 修改 Docker Daemon 配置
我们需要知道不安全仓库的域名或 IP 地址。假设仓库地址为 192.168.15.8:5000
。
编辑 Docker 的配置文件(通常位于 /etc/docker/daemon.json
),添加如下配置:
{
"insecure-registries": [
"192.168.15.8:5000"
]
}
如果文件已存在其他配置,请保留原有内容,仅添加 insecure-registries
字段。
2.2 重启 Docker 服务
配置完成后,重启 Docker 服务以使更改生效:
sudo systemctl daemon-reload
sudo systemctl restart docker
2.3 验证配置
运行 docker info
命令,查看是否包含如下内容:
Insecure Registries:
192.168.15.8:5000
127.0.0.0/8
✅ 出现上述内容表示配置成功。
3. 在 Linux 上拉取和推送镜像
3.1 查看仓库中的镜像
使用 curl 查看仓库中有哪些镜像:
curl http://192.168.15.8:5000/v2/_catalog
输出示例:
{"repositories":["baeldung-alpine"]}
3.2 拉取镜像
执行拉取命令:
docker pull 192.168.15.8:5000/baeldung-alpine
输出示例:
Using default tag: latest
latest: Pulling from baeldung-alpine
43c4264eed91: Pull complete
Digest: sha256:33735bd63cf84d7e388d9f6d297d348c523c044410f553bd878c6d7829612735
Status: Downloaded newer image for 192.168.15.8:5000/baeldung-alpine:latest
3.3 推送本地镜像到仓库
推送前需先打标签:
docker tag ubuntu-with-curl:latest 192.168.15.8:5000/ubuntu-with-curl
然后推送:
docker push 192.168.15.8:5000/ubuntu-with-curl
输出示例:
Using default tag: latest
The push refers to repository [192.168.15.8:5000/ubuntu-with-curl]
eed26a6f3e28: Pushed
b15b682e901d: Pushed
latest: digest: sha256:e84b9ff551a31313f5e8d3c252ea63ba455ac1e9f87fe2bda3e4c78ab0c02b30 size: 741
再次查看仓库内容:
curl http://192.168.15.8:5000/v2/_catalog
输出示例:
{"repositories":["baeldung-alpine","ubuntu-with-curl"]}
✅ 镜像已成功推送。
4. 在 Windows 环境中配置不安全仓库
Windows 上使用 Docker Desktop,配置方式略有不同。
4.1 修改 Docker Engine 配置
打开 Docker Desktop,进入 Settings > Docker Engine,在 JSON 配置中添加:
{
"insecure-registries": [
"192.168.15.8:5000"
]
}
点击 Apply & Restart 保存并重启 Docker。
4.2 验证仓库内容
使用 PowerShell 查看仓库内容:
Invoke-WebRequest -Uri "http://192.168.15.8:5000/v2/_catalog"
输出示例:
Content : {"repositories":["baeldung-alpine","ubuntu-with-curl"]}
5. 在 Windows 上拉取和推送镜像
5.1 拉取镜像
docker pull 192.168.15.8:5000/baeldung-alpine
输出示例:
Using default tag: latest
latest: Pulling from baeldung-alpine
43c4264eed91: Download complete
Digest: sha256:33735bd63cf84d7e388d9f6d297d348c523c044410f553bd878c6d7829612735
Status: Downloaded newer image for 192.168.15.8:5000/baeldung-alpine:latest
5.2 推送镜像
同样,先打标签:
docker tag alpine-with-curl 192.168.15.8:5000/alpine-with-curl
然后推送:
docker push 192.168.15.8:5000/alpine-with-curl
输出示例:
Using default tag: latest
The push refers to repository [192.168.15.8:5000/alpine-with-curl]
da9db072f522: Pushed
latest: digest: sha256:029a752048e32e843bd6defe3841186fb8d19a28dae8ec287f433bb9d6d1ad85 size: 1022
再次验证仓库内容:
Invoke-WebRequest -Uri "http://192.168.15.8:5000/v2/_catalog"
输出示例:
{"repositories":["alpine-with-curl","baeldung-alpine","ubuntu-with-curl"]}
✅ 镜像推送成功。
6. 小结
本文介绍了在 Linux 和 Windows 环境下如何配置 Docker 以支持不安全仓库,并演示了如何从这类仓库中拉取和推送镜像。主要步骤包括:
- ✅ 修改 Docker Daemon 配置,添加
insecure-registries
- ✅ 重启 Docker 服务
- ✅ 使用
docker pull
/docker push
进行操作
⚠️ 踩坑提醒:配置完成后务必重启 Docker,否则配置不会生效;推送镜像前必须打标签,否则会失败。
如需进一步了解 Docker 仓库配置或私有仓库搭建,可参考官方文档或相关文章。