【docker】登陆私有CA/自签名证书镜像库,客户端docker配置

私有CA/自签名证书镜像库地址:https://harbor.example.com

docker 登陆自签名证书的docker镜像库:

mkdir  -p   /etc/docker/certs.d/harbor.example.com/
cp  harbor-ca.crt   /etc/docker/certs.d/harbor.example.com/
docker login -u 账号 -p 密码   harbor.example.com

docker login harbor.example.com 之前是否需要 restart 本地docker ?

根据 Docker 的官方文档和常见实践,配置自签名证书后通常不需要重启 Docker 服务

以下是详细解释和操作建议:


关键说明:

  1. 动态加载证书
    Docker 客户端在运行时会自动检测 /etc/docker/certs.d/ 目录下的证书变更。当你将 CA 证书复制到对应目录后:
mkdir -p /etc/docker/certs.d/harbor.example.com/
cp harbor-ca.crt /etc/docker/certs.d/harbor.example.com/

Docker 会立即识别新证书,无需重启服务。

  1. 证书文件名要求
    确保证书文件名符合 Docker 要求:
  • 必须命名为 ca.crt(其他名称无效)。
    正确操作:
# 复制并重命名为 ca.crt
cp harbor-ca.crt /etc/docker/certs.d/harbor.example.com/ca.crt

如果使用其他名称(如 harbor-ca.crt),Docker 将忽略该证书。

  1. 直接登录测试
    完成证书配置后,直接执行登录命令:
docker login -u 账号 -p 密码 harbor.example.com

特殊情况处理(需重启 Docker):

如果遇到以下错误,才需要重启 Docker 服务:

x509: certificate signed by unknown authority

重启 Docker 命令

# Systemd 系统 
sudo systemctl restart docker

# SysVinit 系统 (旧版 Linux)
sudo service docker restart

完整操作流程:

# 1. 创建证书目录
sudo mkdir -p /etc/docker/certs.d/harbor.example.com/

# 2. 复制证书并重命名为 ca.crt
sudo cp harbor-ca.crt /etc/docker/certs.d/harbor.example.com/ca.crt

# 3. 直接登录(无需重启 Docker)
docker login harbor.example.com  -u 账号  -p 密码

# 4. 若登录报错 "x509: unknown authority",则重启 Docker 后再试
sudo systemctl restart docker# 或 sudo service docker restart
docker login harbor.example.com -u 账号 -p 密码

注意事项:

  1. 证书有效性
    确保 harbor-ca.crt 是镜像仓库的根 CA 证书(不是服务器证书),且与仓库的域名匹配。

  2. 目录权限
    证书目录需允许 Docker 读取:

sudo chmod 644 /etc/docker/certs.d/harbor.example.com/ca.crt
  1. 域名解析
    确保 harbor.example.com 能正确解析到仓库 IP。

  2. 端口问题
    如果仓库使用非标准端口(如 5000),目录名需包含端口:

/etc/docker/certs.d/harbor.example.com:5000/ca.crt

总结:

  • 99% 的情况无需重启 Docker,动态加载证书是 Docker 的默认行为。
  • 优先检查证书文件名是否为 ca.crt 和路径是否正确。
  • 仅在登录报证书错误时重启 Docker 服务。

是否一定需要复制证书harbor-ca.crt并重命名为 ca.crt ?

对于私有CA或自签名证书的Docker镜像库(如https://harbor.example.com),当您将证书文件(如harbor-ca.crt)复制到/etc/docker/certs.d/harbor.example.com/目录时,不需要重命名文件,但必须确保文件满足以下条件:

关键规则:

  1. 证书格式:文件必须是PEM格式(通常以.crt.pem.cert为扩展名)。
  2. 文件名要求:Docker会自动加载该目录下所有符合 *.crt*.cert*.pem 的文件作为可信CA证书。
  3. 目录结构:目录名称必须与镜像库域名完全一致(如 harbor.example.com)。

您的操作:

mkdir -p /etc/docker/certs.d/harbor.example.com/
cp harbor-ca.crt /etc/docker/certs.d/harbor.example.com/# 直接复制,无需改名
  • ✅ 正确:因为 harbor-ca.crt.crt 后缀,Docker会自动识别。

补充说明:

  • 多证书支持:如果目录中有多个证书文件(如 ca1.crtca2.pem),Docker会加载所有证书。
  • 重启Docker?:通常无需重启Docker服务,但若遇到问题可尝试重启:
sudo systemctl restart docker
  • 测试连接
docker login -u 账号 -p 密码 harbor.example.com

常见错误排查:

  1. 证书未生效:确保证书是PEM格式(文本格式,以 -----BEGIN CERTIFICATE----- 开头)。
  2. 目录名不匹配:检查/etc/docker/certs.d/下的目录名是否与镜像库域名完全一致(包括端口号,如使用非443端口需包含端口:harbor.example.com:5000)。
  3. 权限问题:确保证书文件可读:
chmod 644 /etc/docker/certs.d/harbor.example.com/harbor-ca.crt

结论:无需重命名,保留原文件名 harbor-ca.crt 即可生效。

Linux系统级信任自签名证书的相关路径和操作

在 RHEL/CentOS/Fedora 系统上信任自签名证书的正确步骤:

# 1. 复制证书到信任锚点目录
sudo cp harbor-ca.crt /etc/pki/ca-trust/source/anchors/

# 2. 更新系统证书信任库
sudo update-ca-trust

# 3. 重启 Docker 服务(必须步骤)
sudo systemctl restart docker

关键说明:

  1. 路径正确性
  • /etc/pki/ca-trust/source/anchors/ 是 Red Hat 系系统专门用于存放自定义 CA 证书的目录
  • 这是比直接放在 /etc/pki/ca-trust/extracted/ 更规范的作法
  1. 必须重启 Docker
sudo systemctl restart docker

因为 Docker 在启动时会加载系统证书库,只有重启后才会识别新添加的证书

  1. 验证证书是否被信任
# 列出所有被信任的证书
awk -v cmd='openssl x509 -noout -subject' '/BEGIN/{close(cmd)};{print | cmd}' < /etc/pki/tls/certs/ca-bundle.crt | grep "Your Certificate Subject"

# 或者检查特定证书
openssl verify -CAfile /etc/pki/tls/certs/ca-bundle.crt harbor-ca.crt

对于其他 Linux 发行版:

  • Debian/Ubuntu
sudo cp harbor-ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
sudo systemctl restart docker
  • openSUSE
sudo cp harbor-ca.crt /etc/pki/trust/anchors/
sudo update-ca-certificates
sudo systemctl restart docker

完成后的登录操作:

docker login harbor.example.com -u 账号 -p 密码

常见问题排查:

如果仍然遇到证书错误:

  1. 确保证书是 PEM 格式(文本格式,以 -----BEGIN CERTIFICATE----- 开头)
  2. 检查证书是否包含完整证书链
  3. 验证域名是否匹配:
openssl x509 -in harbor-ca.crt -text -noout | grep "Subject: CN ="
  1. 检查系统时间是否正确(证书有效期验证)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容