亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號