资讯动态

Docker Compose一键部署Harbor镜像仓库(附SSL证书配置避坑指南)

发布时间:2026/8/11 10:14:23 来源:尧图企业网站定制
Docker Compose实战10分钟构建高可用Harbor镜像仓库含SSL全自动配置方案当团队需要管理大量容器镜像时单机版Docker Registry很快就会遇到性能瓶颈。上周我们的CI/CD流水线突然崩溃追查发现竟是自建镜像仓库的磁盘IO爆满导致。这次事故让我彻底明白——是时候上企业级解决方案了。Harbor作为CNCF毕业项目不仅提供镜像存储功能更集成了漏洞扫描、权限管理、多租户支持等生产级特性。本文将分享如何用Docker Compose快速搭建带SSL加密的Harbor服务特别针对证书配置这个高频踩坑点给出全自动解决方案。所有配置已通过测试环境验证适配v2.7版本。1. 环境准备与智能检测脚本在开始前建议运行这个环境检查脚本一键验证系统状态#!/bin/bash # 环境检查脚本 check_docker() { if ! command -v docker /dev/null; then echo ❌ Docker未安装 return 1 fi docker_version$(docker --version | cut -d -f3 | tr -d ,) if [ $(printf %s\n 20.10.0 $docker_version | sort -V | head -n1) ! 20.10.0 ]; then echo ❌ Docker版本过低当前: $docker_version return 1 fi echo ✅ Docker $docker_version } check_compose() { if ! command -v docker-compose /dev/null; then echo ❌ Docker Compose未安装 return 1 fi compose_version$(docker-compose --version | grep -oP \d\.\d\.\d) if [ $(printf %s\n 1.29.0 $compose_version | sort -V | head -n1) ! 1.29.0 ]; then echo ❌ Docker Compose版本过低当前: $compose_version return 1 fi echo ✅ Docker Compose $compose_version } check_docker check_compose常见环境问题解决方案问题类型修复命令适用系统Docker版本过低curl -fsSL https://get.docker.comshCompose未安装sudo curl -L https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose所有Linux权限不足sudo usermod -aG docker $USER newgrp docker需要sudo权限提示生产环境建议预留至少4核CPU、8GB内存和100GB存储空间否则可能触发OOM Killer终止Harbor组件2. 全自动部署方案传统部署需要手动修改十余个配置项我们通过环境变量注入实现零配置部署。新建harbor-auto.yml文件version: 3.7 services: harbor: image: goharbor/harbor:v2.7.0 container_name: harbor restart: unless-stopped ports: - 80:8080 - 443:8443 volumes: - ./data:/data - ./certs:/etc/harbor/ssl environment: - HARBOR_HOSTNAME${HOSTNAME:-harbor.local} - HARBOR_ADMIN_PASSWORD${ADMIN_PWD:-Harbor12345} - DB_PASSWORD${DB_PWD:-Harbor12345} - CORE_SECRET${CORE_SECRET:-$(openssl rand -hex 16)} - REGISTRY_STORAGE_DELETE_ENABLEDtrue depends_on: - redis - postgresql redis: image: redis:6.2-alpine restart: unless-stopped volumes: - ./redis-data:/data postgresql: image: postgres:13-alpine restart: unless-stopped volumes: - ./pg-data:/var/lib/postgresql/data environment: - POSTGRES_USERharbor - POSTGRES_PASSWORD${DB_PWD:-Harbor12345} - POSTGRES_DBregistry启动服务时通过.env文件注入配置# 生成随机密码和密钥 echo ADMIN_PWD$(openssl rand -base64 12) .env echo DB_PWD$(openssl rand -base64 12) .env echo HOSTNAMEharbor.yourdomain.com .env # 启动服务 docker-compose -f harbor-auto.yml up -d关键参数说明REGISTRY_STORAGE_DELETE_ENABLEDtrue允许通过API删除镜像CORE_SECRET使用随机生成的密钥增强安全性unless-stopped策略确保异常退出后自动恢复3. SSL证书自动化配置自签名证书导致浏览器警告是常见问题这里给出三种解决方案方案A自动生成可信证书推荐使用mkcert工具生成本地信任的证书# 安装mkcert brew install mkcert # macOS sudo apt install libnss3-tools curl -s https://api.github.com/repos/FiloSottile/mkcert/releases/latest | grep browser_download_url | grep linux-amd64 | cut -d -f4 | wget -qi - chmod x mkcert-v*-linux-amd64 sudo mv mkcert-v*-linux-amd64 /usr/local/bin/mkcert # 生成证书 mkcert -install mkcert harbor.yourdomain.com *.harbor.yourdomain.com # 自动配置到Harbor mkdir -p certs mv harbor.yourdomain.com*.pem certs/ docker-compose -f harbor-auto.yml down docker-compose -f harbor-auto.yml up -d方案BLets Encrypt自动化适合有公网域名的情况# 使用certbot获取证书 sudo apt install certbot certbot certonly --standalone -d harbor.yourdomain.com # 配置证书软链接 ln -s /etc/letsencrypt/live/harbor.yourdomain.com/fullchain.pem certs/harbor.crt ln -s /etc/letsencrypt/live/harbor.yourdomain.com/privkey.pem certs/harbor.key # 设置自动续期 (crontab -l 2/dev/null; echo 0 3 * * * certbot renew --quiet --post-hook docker-compose -f /path/to/harbor-auto.yml restart) | crontab -方案C企业证书配置已有CA证书时的配置方法# 转换证书格式如需 openssl pkcs12 -in cert.pfx -out cert.pem -nodes # 验证证书链 openssl verify -CAfile ca.crt harbor.crt # 目录结构 certs/ ├── ca.crt # CA根证书 ├── harbor.crt # 服务器证书 └── harbor.key # 私钥证书验证命令# 检查端口响应 openssl s_client -connect harbor.yourdomain.com:443 -servername harbor.yourdomain.com # 验证证书日期 openssl x509 -in certs/harbor.crt -noout -dates4. 运维监控与故障排查健康检查方案内置的健康检查端点# API健康检查 curl -k https://harbor.yourdomain.com/api/v2.0/health | jq # 组件状态检查 docker-compose -f harbor-auto.yml ps # 资源监控 docker stats $(docker-compose -f harbor-auto.yml ps -q)常见故障处理指南故障现象排查命令解决方案503 Service Unavailabledocker logs harbor-core检查数据库连接确认postgresql容器运行证书不受信任openssl verify -CAfile ca.crt harbor.crt确保证书链完整客户端安装CA证书镜像推送失败docker infogrep -A5 Insecure Registries存储空间不足docker system df清理旧镜像或扩展存储卷性能优化参数在harbor-auto.yml中添加这些调优参数services: harbor: environment: - REGISTRY_HTTP_MAX_CONNECTIONS1000 - REGISTRY_STORAGE_CACHE_BLOBDESCRIPTORredis - REGISTRY_REDIS_ADDRredis:6379 - JOBSERVICE_POOL_WORKERS10 deploy: resources: limits: cpus: 4 memory: 8G日志分析技巧# 实时错误监控 tail -f ./data/log/harbor/*.log | grep -E ERROR|WARN # 请求耗时分析 cat ./data/log/nginx/access.log | awk {print $1,$4,$7,$NF} | sort -k4 -nr | head5. 高级功能配置镜像自动清理配置定期清理策略每周日凌晨3点services: harbor-jobservice: environment: - CLEANUP_CRON0 3 * * 0 - CLEANUP_DRY_RUNfalse - CLEANUP_KEEP_COUNT10手动触发清理curl -X POST -H Authorization: Basic $(echo -n admin:$ADMIN_PWD | base64) https://harbor.yourdomain.com/api/v2.0/system/gc/schedule -d {schedule:{type:Manual},parameters:{delete_untagged:true}}漏洞扫描集成启用Trivy扫描器services: trivy: image: goharbor/trivy-adapter:v2.7.0 container_name: trivy restart: unless-stopped volumes: - ./trivy-cache:/root/.cache environment: - SCANNER_LOG_LEVELdebug - TRIVY_NON_SSLtrue扫描策略配置示例{ scan_all: false, daily_scan: true, scan_on_push: true, severity_threshold: high }多租户权限管理通过API创建项目并设置权限# 创建项目 curl -X POST -H Authorization: Basic $(echo -n admin:$ADMIN_PWD | base64) -H Content-Type: application/json -d {project_name: prod,metadata: {public: false}} https://harbor.yourdomain.com/api/v2.0/projects # 添加用户 curl -X POST -H Authorization: Basic $(echo -n admin:$ADMIN_PWD | base64) -H Content-Type: application/json -d {username: dev1,email: dev1company.com,password: Dev12345,realname: Developer 1} https://harbor.yourdomain.com/api/v2.0/users # 设置权限 curl -X POST -H Authorization: Basic $(echo -n admin:$ADMIN_PWD | base64) -H Content-Type: application/json -d {role_id: 2,member_user: {username: dev1}} https://harbor.yourdomain.com/api/v2.0/projects/prod/members权限角色对照表角色ID角色名称权限范围1项目管理员所有操作2开发人员推送/拉取镜像3访客仅拉取4维护人员推送/拉取扫描

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价