Docker部署的Artifactory-Pro-7.59.11无法连接外部PostgreSQL
Artifactory-Pro-7.59.11 无法连接外部PostgreSQL数据库问题排查与解决
问题现象
通过docker-compose部署的Artifactory-Pro-7.59.11无法连接外部PostgreSQL数据库,日志无限循环显示等待数据库就绪。
容器日志内容
Preparing to run Artifactory in Docker Running as uid=1030(artifactory) gid=1030(artifactory) groups=1030(artifactory) Dockerfile for this image can found inside the container. To view the Dockerfile: 'cat /docker/artifactory-pro/Dockerfile.artifactory'. Resolved .shared.database.type (postgresql) from /opt/jfrog/artifactory/var/etc/system.yaml Resolved .shared.database.url (__sensitive_key_hidden___) from /opt/jfrog/artifactory/var/etc/system.yaml Waiting for DB postgresql to be ready on 5.4.3.2/5432 for 30 seconds Copying Artifactory bootstrap files 2023-07-26T09:30:01.843Z [shell] [INFO ] [] [systemYamlHelper.sh:607 ] [main] - Resolved .shared.node.id (artifactory.example.com) from /opt/jfrog/artifactory/var/etc/system.yaml 2023-07-26T09:30:02.017Z [shell] [INFO ] [] [systemYamlHelper.sh:607 ] [main] - Resolved .shared.node.ip (1.2.3.4) from /opt/jfrog/artifactory/var/etc/system.yaml 2023-07-26T09:30:04.508Z [shell] [INFO ] [] [systemYamlHelper.sh:607 ] [main] - Resolved .shared.database.type (postgresql) from /opt/jfrog/artifactory/var/etc/system.yaml 2023-07-26T09:30:04.999Z [shell] [INFO ] [] [systemYamlHelper.sh:607 ] [main] - Resolved .shared.database.url (__sensitive_key_hidden___) from /opt/jfrog/artifactory/var/etc/system.yaml 2023-07-26T09:30:05.333Z [shell] [INFO ] [] [systemYamlHelper.sh:607 ] [main] - Resolved .shared.database.password (__sensitive_key_hidden___) from /opt/jfrog/artifactory/var/etc/system.yaml
已完成的验证操作
- 确认
system.yaml配置、数据库凭证正确 - 检查iptables规则,Docker容器数据包可到达外部数据库5432端口,网络配置无误
- 已配置PostgreSQL:
postgresql.conf设置listen_addresses='*'pg_hba.conf添加规则host artifactory artifactory 1.2.3.4/32 md5
当前配置文件
system.yaml
shared: database: type: postgresql driver: org.postgresql.Driver url: jdbc:postgresql://5.4.3.2:5432/artifactory username: artifactory password: password node: ip: 1.2.3.4 id: artifactory.example.com name: artifactory router: entrypoints: externalPort: 8081
docker-compose.yaml
version: '3' services: artifactory: image: ${DOCKER_REGISTRY}/jfrog/artifactory-pro:${ARTIFACTORY_VERSION} container_name: artifactory environment: - JF_ROUTER_ENTRYPOINTS_EXTERNALPORT=${JF_ROUTER_ENTRYPOINTS_EXTERNALPORT} ports: - ${JF_ROUTER_ENTRYPOINTS_EXTERNALPORT}:${JF_ROUTER_ENTRYPOINTS_EXTERNALPORT} # for router communication - 8081:8081 # for artifactory communication volumes: - ${ROOT_DATA_DIR}/var:/var/opt/jfrog/artifactory - /etc/localtime:/etc/localtime:ro restart: always logging: driver: json-file options: max-size: "50m" max-file: "10" ulimits: nproc: 65535 nofile: soft: 32000 hard: 40000
排查与解决步骤
1. 验证PostgreSQL数据库与用户权限
登录PostgreSQL服务器,执行以下SQL命令确认状态:
-- 检查artifactory数据库是否存在 SELECT datname FROM pg_database WHERE datname = 'artifactory'; -- 检查artifactory用户是否拥有数据库连接权限 SELECT usename, has_database_privilege(usename, 'artifactory', 'connect') FROM pg_user WHERE usename = 'artifactory';
若数据库或用户不存在,执行创建语句:
CREATE DATABASE artifactory; CREATE USER artifactory WITH PASSWORD 'your_password'; GRANT ALL PRIVILEGES ON DATABASE artifactory TO artifactory;
2. 容器内手动测试数据库连接
进入Artifactory容器,直接测试PostgreSQL连接:
# 进入容器 docker exec -it artifactory bash # 安装psql客户端(若容器内没有) apt update && apt install -y postgresql-client # 测试连接 psql -h 5.4.3.2 -p 5432 -U artifactory -d artifactory
根据连接报错信息直接定位问题(如密码错误、SSL配置冲突等)。
3. 调整JDBC URL的SSL参数
若PostgreSQL启用了SSL,需在JDBC URL中添加SSL配置;若未启用,明确关闭SSL:
# 启用SSL(根据PostgreSQL配置调整sslmode) shared: database: url: jdbc:postgresql://5.4.3.2:5432/artifactory?sslmode=require # 或关闭SSL url: jdbc:postgresql://5.4.3.2:5432/artifactory?sslmode=disable
4. 延长数据库等待超时时间
在docker-compose.yaml的environment中添加超时配置,延长Artifactory等待数据库就绪的时间:
environment: - JF_SHARED_DATABASE_WAIT_TIMEOUT=120 # 延长至120秒
5. 检查PostgreSQL日志
查看PostgreSQL的日志文件(通常在/var/log/postgresql/或自定义挂载目录),排查是否存在:
- 密码验证失败记录
- IP白名单规则不匹配
- 数据库连接数耗尽
6. 确认system.yaml加载路径正确性
在容器内检查Artifactory实际加载的配置文件:
cat /opt/jfrog/artifactory/var/etc/system.yaml
确保内容与本地配置一致,未被其他文件覆盖。
内容的提问来源于stack exchange,提问作者Ashish Chaurasia
相关产品推荐
相关产品推荐

