下面给你一份 清晰、系统、可直接用于实战的《Docker 基础:私库系列:再探 Harbor(4)— HTTPS 方式的私库管理》总结与教程》。
一步步从 HTTP → HTTPS → 证书 → 客户端配置 → 推拉镜像 全流程说明。
🌐 Docker 私有仓库 Harbor:HTTPS 管理完整指南
Harbor 在生产环境中 必须使用 HTTPS,否则:
- 密码会明文传输
- Docker 客户端需要
--insecure-registry才能访问 - Notary / 安全扫描等高级功能不能启用
下面从零搭建一个 使用 HTTPS 的 Harbor 私有仓库。
1️⃣ 创建证书(自签名或正式 CA)
✔ 方式 A:使用自签名证书(测试环境常用)
1. 创建 CA 私钥
openssl genrsa -out ca.key 4096
2. 生成 CA 根证书
openssl req -x509 -new -nodes \
-key ca.key -days 3650 \
-out ca.crt \
-subj "/CN=myregistry.com"
3. 为 Harbor 生成证书
openssl genrsa -out harbor.key 4096
4. 生成证书签名请求(CSR)
openssl req -new \
-key harbor.key \
-out harbor.csr \
-subj "/CN=myregistry.com"
5. 创建证书
openssl x509 -req \
-CA ca.crt -CAkey ca.key \
-CAcreateserial \
-in harbor.csr \
-out harbor.crt \
-days 3650
你将得到:
ca.crt
harbor.crt
harbor.key
✔ 方式 B:用 Let’s Encrypt 正式证书(生产建议)
只需运行:
certbot certonly --standalone -d myregistry.com
证书位于:
/etc/letsencrypt/live/myregistry.com/
2️⃣ Harbor 配置 HTTPS
编辑 Harbor 配置文件:
vim harbor.yml
找到:
hostname: myregistry.com
https:
enabled: true
certificate: /data/cert/harbor.crt
private_key: /data/cert/harbor.key
然后执行:
sudo ./prepare
sudo docker-compose down -v
sudo docker-compose up -d
Harbor 将以 HTTPS 方式运行。
3️⃣ 客户端(Docker)信任 Harbor 的证书
对于 自签名证书,必须让 Docker 信任 CA:
在每一个要连接 Harbor 的 Docker 主机上:
1. 创建目录
sudo mkdir -p /etc/docker/certs.d/myregistry.com/
2. 拷贝 CA 证书
sudo cp ca.crt /etc/docker/certs.d/myregistry.com/ca.crt
3. 重启 Docker
sudo systemctl restart docker
如果不做这一步,会报错:
x509: certificate signed by unknown authority
4️⃣ 登录 Harbor(HTTPS)
docker login myregistry.com
输入 Harbor 管理员(或项目用户)账号密码成功即可。
5️⃣ 推送镜像至 HTTPS Harbor
1. 给镜像打标签
docker tag nginx:latest myregistry.com/library/nginx:v1
2. 推送镜像
docker push myregistry.com/library/nginx:v1
输出类似:
The push refers to repository [...]
latest: digest: sha256:... size: ...
即表示 HTTPS Harbor 推送成功。
6️⃣ 从 Harbor 拉取镜像(HTTPS)
docker pull myregistry.com/library/nginx:v1
成功后即可使用。
7️⃣ 常见错误与解决方案
❌ x509: certificate signed by unknown authority
✔ 原因:Docker 不信任你的 CA
✔ 解决:把 ca.crt 放到 /etc/docker/certs.d/myregistry.com/
❌ Client sent an HTTP request to an HTTPS server
✔ 原因:你访问时没加 https 或客户端没信任证书
✔ 检查:
harbor.yml中 https 是否启用- Docker 客户端是否信任证书
❌ unauthorized: authentication required
✔ 需要 docker login
✔ 也需确认镜像属于正确的 Project(如 library)
❌ Harbor 后台 444/502
通常是 nginx 证书路径或权限错误
需确认 Harbor 可读取证书文件。
🎯 总结(HTTPS Harbor 4 步完成)
- 生成证书(CA + Harbor)
- 配置
harbor.yml启动 https - Docker 客户端信任 CA
- login → push → pull
即可完成安全的 Harbor 私有仓库部署。
发表回复