如何将Artifactory配置为Docker镜像仓库?部署故障求助
解决Artifactory作为Docker镜像仓库的配置问题
看起来你在Ubuntu和CentOS环境下都遇到了不同的配置障碍,咱们一步步拆解解决:
一、Ubuntu 16.04 + Docker 1.13.1 环境的问题处理
1. 修改/etc/default/docker后Docker重启失败
Ubuntu 16.04已经用systemd管理Docker服务,直接修改/etc/default/docker容易和systemd配置冲突,或者你添加的参数格式有误。正确操作如下:
- 先恢复
/etc/default/docker到修改前的状态,确保Docker能先启动起来 - 创建(若不存在)
/etc/docker/daemon.json文件,在里面配置Docker的registry相关参数,比如测试阶段添加不安全仓库:{ "insecure-registries": ["docker.artifactory"] } - 执行
sudo systemctl restart docker重启服务 - 如果还是报错,运行
systemctl status docker.service和journalctl -xe查看具体错误,大概率是参数格式错误或端口冲突。
2. Docker登录时的证书错误(x509: certificate is valid for localhost...)
这个错误说明Artifactory的SSL证书只绑定了localhost,而你用docker.artifactory域名访问时不匹配。有两种解决思路:
- 临时测试方案:继续用上面的
insecure-registries配置,让Docker跳过证书验证(不推荐生产环境) - 生产环境方案:给Artifactory配置绑定
docker.artifactory域名的SSL证书;或者修改本地hosts文件,把docker.artifactory指向localhost(仅限测试),同时确保Artifactory证书配置包含该域名。
3. 登录时的404错误
Artifactory 5.11的Docker仓库需要先在UI中创建对应类型的仓库(本地/远程/虚拟仓库),且登录路径要匹配仓库地址。比如你创建了名为docker-local的本地Docker仓库,正确的登录命令应该是:
docker login docker.artifactory/docker-local
另外,Artifactory 5.x的Docker v2 API需要指定仓库路径,直接访问根路径会返回404。还要确保你创建的Docker仓库配置正确:仓库类型选Docker,子路径/端口模式的设置符合你的访问需求。
二、CentOS环境下容器重启循环的问题
Postgres、Artifactory、Nginx一直重启,大概率是以下原因:
- 权限问题:docker-compose挂载的本地数据目录权限不对,CentOS的SELinux可能阻止容器访问目录。可以临时关闭SELinux测试:
sudo setenforce 0,或者给数据目录设置正确权限:sudo chown -R 1030:1030 ./artifactory-data(Artifactory容器的默认用户ID是1030) - 资源不足:Artifactory启动至少需要2G内存,Postgres也需要一定资源。用
docker stats查看容器资源占用,或者调整docker-compose里的内存限制参数 - 配置错误:docker-compose.yml里的数据库连接参数不匹配,比如Postgres的密码、用户名和Artifactory的配置不一致,导致Artifactory连不上数据库而重启。检查
DB_PASSWORD、DB_USER等环境变量是否统一 - 端口冲突:主机上的5432(Postgres)、8081(Artifactory)、80/443(Nginx)端口被其他服务占用。用
netstat -tulpn查看端口占用,修改docker-compose里的端口映射。
通用检查步骤
不管哪个环境,先确认以下几点:
- Artifactory UI能正常访问,且已创建至少一个Docker类型的仓库
- Docker客户端版本和Artifactory版本兼容(Docker 1.13.1和Artifactory 5.11兼容,不过建议尽量用较新的Docker版本)
- 本地hosts文件已将
docker.artifactory指向Artifactory服务器IP - 服务器防火墙已开放对应端口(比如Docker仓库用的80/443,或Artifactory的8081端口)
内容的提问来源于stack exchange,提问作者Ranjit




