【问题标题】:problem with postgres docker container inside Gitlab CIGitlab CI中postgres docker容器的问题
【发布时间】:2021-02-27 20:46:32
【问题描述】:

我的项目在这个问题上被阻止了几天,它在 localhost 上工作,但在 gitlabCI 上没有。 我想在 gitlabCI 中的 postgres docker 映像上建立一个测试数据库,但它不起作用,我已经尝试了很多东西,并且在问这个问题之前浪费了很多时间:'(。 在我的 docker-compose.yml 文件下方:

version: "3"
services: 
    nginx: 
        image: nginx:latest
        container_name: nginx
        depends_on: 
            - postgres
            - monapp
        volumes: 
            - ./nginx-conf:/etc/nginx/conf.d
            - ./util/certificates/certs:/etc/nginx/certs/localhost.crt
            - ./util/certificates/private:/etc/nginx/certs/localhost.key
        ports:
        - 81:80
        - 444:443
        networks:
            - monreseau
    monapp:
        image: monimage
        container_name: monapp
        depends_on: 
            - postgres
        ports:
            - "3000:3000"
        networks:
            - monreseau
        command: "npm run local"

    postgres:
        image: postgres:9.6
        container_name: postgres
        environment:
            POSTGRES_USER: postgres
            POSTGRES_HOST: postgres
            POSTGRES_PASSWORD: postgres      
        volumes: 
            - ./pgDatas:/var/lib/postgresql/data/
            - ./db_dumps:/home/dumps/
        ports:
            - "5432:5432"
        networks: 
            - monreseau
        
networks: 
    monreseau:

在我的 gitlab-ci.yml 文件下方:

stages:
  # - build
  - test

image: 
  name: docker/compose:latest

services:
- docker:dind

before_script:
- docker version
- docker-compose version 

variables:
  DOCKER_HOST: tcp://docker:2375/


# build:
#   stage: build
#   script:
#   - docker build -t monimage .
#   - docker-compose up -d

test:
  stage: test
  script :
  - docker build -t monimage .
  - docker-compose up -d
  - docker ps
  - docker exec -i postgres psql -U postgres -h postgres -f /home/dumps/test/dump_test_001 -c \\q
  - exit
  - docker exec -i monapp ./node_modules/.bin/env-cmd -f ./env/.env.builded-test npx jasmine spec/auth_queries.spec.js
  - exit

这是 docker ps log on gitlabCI server 的内容:

docker ps on gitlab-CI

我认为将 postgres 放在主机上会起作用,但我总是在 gitlab-ci 终端中使用:

psql: could not connect to server: Connection refused
    Is the server running on host "postgres" (172.19.0.2) and accepting
    TCP/IP connections on port 5432?

我也尝试将 docker 放在主机上,但出现错误:

psql: could not translate host name "docker" to address: Name or service not known

精度不高:当我进行构建测试时,它正在我的计算机的本地主机上工作 在我的makefile下面:

builded-test:
    docker build -t monimage .
    docker-compose up -d
    docker ps
    docker exec -i postgres psql -U postgres -h postgres -f /home/dumps/test/dump_test_001 -c \\q
    exit
    docker exec -i monapp ./node_modules/.bin/env-cmd -f ./env/.env.builded-test npx jasmine spec/auth_queries.spec.js
    exit
    docker-compose down

我想在 gitlab CI 上的 docker-compose 中制作工作 postgres 图像以执行我的测试,请帮助我:) 提前感谢


更新

现在它在 gitlab-runner 中工作,但在我推送时仍然不在 gitlab 上,我更新文件如下

我补充说:

variables:
  POSTGRES_DB: postgres
  POSTGRES_USER: postgres
  POSTGRES_PASSWORD: ""
  POSTGRES_HOST_AUTH_METHOD: trust

改变了

  test:
  stage: test
  script :
  - docker build -t monimage .
  - docker-compose up -d
  - docker ps
  - docker exec postgres psql -U postgres **-h postgres** -f /home/dumps/test/dump_test_001
  - docker exec monapp ./node_modules/.bin/env-cmd -f ./env/.env.builded-test npx jasmine spec/auth_queries.spec.js

在.gitlab-ci.yml

但是当我将它推送到 gitlab 时仍然无法正常工作,它给了我:

sql: could not connect to server: Connection refused
    Is the server running on host "postgres" (172.19.0.2) and accepting
    TCP/IP connections on port 5432?

有什么想法吗? :)

【问题讨论】:

标签: postgresql docker docker-compose gitlab-ci docker-in-docker


【解决方案1】:

也许您需要等待 PostgreSQL 服务启动并运行。

您可以在尝试psql 之前添加 10 秒的延迟吗?比如:

 - sleep 10

如果可行,那么你可以使用更具体的解决方案来等待 PostgreSQL 被初始化,比如Docker wait for postgresql to be running

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    • 2021-12-16
    • 2018-06-02
    • 1970-01-01
    • 2020-05-23
    • 2018-01-26
    相关资源
    最近更新 更多