PGHOST for GitLab pipeline with docker:

我有一个 docker-compose 文件,它初始化 postgres 和 postgres 迁移服务。我想在 gitlab 管道中针对我的 docker-compose baked postgres 服务运行测试,但我无法通过本地主机连接到 pg_db。在我的代码中,我使用 pgx 包。在我的本地机器上,使用 localhost 作为 PGHOST 环境变量没有问题。


所以我的主要问题是我的测试将哪个主机放入 PGHOST 变量以用于 gitlab 管道内的 postgres 连接。


docker-compose.yml


version: "3.3"

services:

    pg_db:

      container_name: pg_db

      image: postgres:13.2-alpine

      environment:

        - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}

        - POSTGRES_USER=${POSTGRES_USER}

        - POSTGRES_DB=${POSTGRES_DB}

        - POSTGRES_SSLMODE=${POSTGRES_SSLMODE}

        - POSTGRES_HOST_AUTH_METHOD=${POSTGRES_HOST_AUTH_METHOD}

      ports:

        - ${POSTGRES_PORT}:5432

      restart: always

      deploy:

        resources:

          limits:

            cpus: '1'

            memory: 4G

      networks:

        - postgres

        - backend


    #init db

    store-init:

      image: x:latest

      container_name: store-init

      environment:

        - PGHOST=pg_db

        - PGUSER=${POSTGRES_USER}

        - PGPASSWORD=${POSTGRES_PASSWORD}

        - PGDATABASE=${POSTGRES_DB}

        - PGPORT=${POSTGRES_PORT}

      restart: on-failure

      depends_on:

        - pg_db

      networks:

        - postgres

        - backend


networks:

  backend:

  postgres:

    driver: bridge


森栏
浏览 92回答 1
1回答

慕哥6287543

在本地机器上运行容器和在 GitLab 中运行它们之间的重要区别之一docker:dind是容器在“本地主机”上不可用——它们在docker:dind容器上可用。如果你想与这个容器交谈,在你的场景中,postgres 容器将可用docker:5432(是你的 postgres 容器具有其端口映射docker的容器的主机名)。docker:dind用简单的 HTTP 服务容器说明作为一个简化的示例,如果您要strm/helloworld-http使用端口映射在本地运行容器,则以下工作:docker run -d --rm -p 80:80 strm/helloworld-http# give it some time to startupcurl http://localhost  # this works但是,GitLab 中的相同设置不会:myjob:  variables:  # these variables are not necessarily required    DOCKER_TLS_CERTDIR: ""    DOCKER_HOST: "tcp://docker:2375"  services:    - docker:dind  script:    - docker run -d --rm -p 80:80 strm/helloworld-http    - sleep 10    - curl http://localhost  # Fails!一种解决方法是改用docker主机名:script:    - docker run -d --rm -p 80:80 strm/helloworld-http    - sleep 10    - curl http://docker  # works!
打开App,查看更多内容
随时随地看视频慕课网APP