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

Concourse CI快速启动:如何让任务连接本地PostgreSQL数据库

解决Concourse-CI任务容器无法连接本地PostgreSQL的问题

核心原因

Concourse的任务容器默认运行在独立的Docker网络中,和宿主机网络环境隔离,直接用localhost访问会指向容器自身而非宿主机的PostgreSQL服务。CONCOURSE_CONTAINERD_ALLOW_HOST_ACCESS仅用于授权容器访问宿主机文件系统,不解决网络连通性问题。

分步解决方案

1. 调整数据库连接地址

根据操作系统环境,替换任务中的数据库连接地址:

  • Docker Desktop(Mac/Windows):用host.docker.internal替代localhost,比如连接串写成 postgresql://user:password@host.docker.internal:5432/dbname
  • Linux环境:使用宿主机在Docker bridge网络中的默认IP(通常是172.17.0.1),或执行ip addr show docker0查看实际桥接IP替换到连接串中

2. 修改PostgreSQL配置允许外部访问

默认PostgreSQL仅监听localhost,需调整配置让容器能访问:

  • 编辑postgresql.conf,将listen_addresses设为'*',允许所有IP访问
  • 编辑pg_hba.conf,添加规则允许Concourse容器所在网段访问:
    host all all 172.17.0.0/16 md5
    
    (如果Linux下用host网络模式,可添加host all all 127.0.0.1/32 md5或宿主机实际IP段)
  • 重启PostgreSQL服务使配置生效

3. 可选:调整Concourse Worker的网络模式(Linux专属)

若地址访问仍失败,可将Concourse Worker容器切换到host网络模式,让任务容器直接共享宿主机网络:
在docker-compose.yml的worker服务块中添加:

network_mode: host

同时注释掉该服务下原有的networks配置(如果有),重启Concourse服务

4. 验证连通性

在任务脚本中先添加测试命令确认网络通畅,比如:

# Docker Desktop环境
telnet host.docker.internal 5432
# Linux环境
telnet 172.17.0.1 5432

测试通过后再执行数据库更新命令,避免因网络问题导致任务失败

内容的提问来源于stack exchange,提问作者Samuel Jenkins

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 10:25:32