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。

docker windows insecure registry

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 仓库配置或私有仓库搭建,可参考官方文档或相关文章。


原始标题:How To Pull a Docker Image From an Insecure Registry