You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将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.servicejournalctl -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_PASSWORDDB_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

火山引擎 最新活动