You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 10:14:53