为了账号安全,请及时绑定邮箱和手机立即绑定

PGHOST for GitLab pipeline with docker:

PGHOST for GitLab pipeline with docker:

Go
森栏 2022-11-23 13:54:23
我有一个 docker-compose 文件,它初始化 postgres 和 postgres 迁移服务。我想在 gitlab 管道中针对我的 docker-compose baked postgres 服务运行测试,但我无法通过本地主机连接到 pg_db。在我的代码中,我使用 pgx 包。在我的本地机器上,使用 localhost 作为 PGHOST 环境变量没有问题。所以我的主要问题是我的测试将哪个主机放入 PGHOST 变量以用于 gitlab 管道内的 postgres 连接。docker-compose.ymlversion: "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        - backendnetworks:  backend:  postgres:    driver: bridge
查看完整描述

1 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

在本地机器上运行容器和在 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 startup

curl 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!


查看完整回答
反对 回复 2022-11-23
  • 1 回答
  • 0 关注
  • 84 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信