Skip to main content
 首页 » 编程设计

postgresql之无法连接到 Gitlab CI 中的 postgres

2024年10月24日31grandyang

我正在尝试使用 GitLab CI PostgreSQL 进行集成测试,但它不起作用。

这是舞台的代码:

integration_test: 
  stage: test 
  tags: 
    - custom_tag 
  services:  
    - postgres 
  variables:  
    POSTGRES_DB: test 
    POSTGRES_HOST: postgres 
    POSTGRES_USER: postgres 
    POSTGRES_PASSWORD: postgres 
    POSTGRES_HOST_AUTH_METHOD: trust 
  script: 
    - docker login -u ${DOCKER_USER} -p ${DOCKER_PASSWORD} ${DOCKER_REGISTRY} 
    - docker pull ${DOCKER_IMAGE_CI} 
    - export PGPASSWORD=${POSTGRES_PASSWORD} 
    - docker run --rm postgres psql -h ${POSTGRES_HOST} -U ${POSTGRES_USER} -d ${POSTGRES_DB} -c "SELECT 'OK' AS status;"  

它返回这样的错误:

psql: error: could not connect to server: could not translate host name "postgres" to address: Name or service not known Anybody can help me?

请您参考如下方法:

您的管道看起来像是将 shell 执行程序与 gitlab 服务一起使用。

命令 docker run --rm postgres <docker command> 不会自动连接到 postgres 网络。您可以尝试使用 --link postgres 运行您的 docker 镜像,更多详细信息 here 。请注意,链接是旧功能,将来可能会被删除。

我个人会尝试使用 docker 图像运行我的管道作业。如果您的图像不公开可见,那么您可以使用 DOCKER_AUTH_CONFIG 绕过它

如果您将 docker runner 与 password protected image 一起使用,那么 yaml 将如下所示:

integration_test: 
  image: ${DOCKER_IMAGE_CI} 
  stage: test 
  tags: 
    - custom_tag 
  services:  
    - postgres 
  variables:  
    POSTGRES_DB: test 
    POSTGRES_HOST: postgres 
    POSTGRES_USER: postgres 
    POSTGRES_PASSWORD: postgres 
    POSTGRES_HOST_AUTH_METHOD: trust 
  script: 
    - PGPASSWORD=${POSTGRES_PASSWORD} psql -h ${POSTGRES_HOST} -U ${POSTGRES_USER} -d ${POSTGRES_DB} -c "SELECT 'OK' AS status;"  
DOCKER_AUTH_CONFIG 环境变量如下( gitlab docs ):
{ 
    "auths": { 
        "${DOCKER_REGISTRY}": { 
            "auth": "(Base64 content from ${DOCKER_USER}:${DOCKER_PASSWORD})" 
        } 
    } 
} 

并生成 base64 身份验证,您可以使用 echo -n "${DOCKER_USER}:${DOCKER_PASSWORD}" | base64