首页 > 解决方案 > 带有 Docker 图像的 Gitlab CI - Flask 微服务测试数据库

问题描述

我正在尝试将内置在 docker 容器中的 Flack 应用程序/服务部署到 Gitlab CI。我可以通过 docker-compose 让一切正常工作,除非我尝试对 postgres 数据库运行测试时出现以下错误:

服务器是否在主机 "events_db" (172.19.0.2) 上运行并接受端口 5432 上的 TCP/IP 连接?

大概这是因为容器不能互相看到。我尝试了许多不同的方法。但下面是我最新的。我试图让 docker-compose 启动两个容器(就像在本地一样),将 postgres db 作为 git 实验室服务运行,从 python 图像而不是 docker 图像运行,使用 docker.prod.yml 其中我删除了卷和变量。

没有任何工作。当您查找“gitlab ci docker flask postgres”时,我几乎检查了谷歌上显示的每个链接,我相信我严重误解了实现。

我确实有 gitlab 亚军。

.gitlab-ci.yml

image: docker:latest
services:
  - docker:dind
  - postgres:latest

stages:
  - test

variables:
  POSTGRES_DB: events_test
  POSTGRES_USER: postgres
  POSTGRES_PASSWORD: postgres
  DATABASE_URL: postgres://postgres@postgres:5432/events_test
  FLASK_ENV: development
  APP_SETTINGS: app.config.TestingConfig
  DOCKER_COMPOSE_VERSION: 1.23.2

before_script:
  #- rm /usr/local/bin/docker-compose
  - apk add --no-cache py-pip python-dev libffi-dev openssl-dev gcc libc-dev make
  - pip install docker-compose

  #- mv docker-compose /usr/local/bin
  - docker-compose up -d --build

test:
  stage: test
  #coverage: '/TOTAL.+ ([0-9]{1,3}%)/'

  script:
    - docker-compose exec -T events python manage.py test

after_script:
  - docker-compose down

码头工人-compose.yml

version: '3.3'

services:
  events:
    build:
      context: ./services/events
      dockerfile: Dockerfile

    volumes:
      - './services/events:/usr/src/app'

    ports:
      - 5001:5000

    environment:
      - FLASK_ENV=development
      - APP_SETTINGS=app.config.DevelopmentConfig
      - DATABASE_URL=postgres://postgres:postgres@events_db:5432/events_dev  # new
      - DATABASE_TEST_URL=postgres://postgres:postgres@events_db:5432/events_test  # new

  events_db:
    build:
      context: ./services/events/app/db
      dockerfile: Dockerfile

    ports:
      - 5435:5432

    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres

标签: postgresqldockerflaskdocker-composegitlab-ci

解决方案


你的 Gitlab Runner 的执行器类型是什么?

如果您使用的是 Kubernetes 执行程序,请添加以下变量:

DOCKER_HOST: tcp://localhost:2375/

对于非 Kubernetes 执行者,我们使用 tcp://docker:2375/

DOCKER_HOST: tcp://docker:2375/

此外,Gitlab Runner 应该处于“特权”模式。

更多信息: https ://docs.gitlab.com/ee/ci/docker/using_docker_build.html#help-and-feedback

希望有帮助!


推荐阅读