postgresql - Gitlab CI with Docker images - Flask 微服务测试数据库

标签 postgresql docker flask docker-compose gitlab-ci

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

Is the server running on host "events_db" (172.19.0.2) and accepting TCP/IP connections on port 5432?

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

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

我确实有 gitlab runner 。

.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

docker-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

最佳答案

你的 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

希望对您有所帮助!

关于postgresql - Gitlab CI with Docker images - Flask 微服务测试数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57154276/

相关文章:

未授权 docker 访问所请求的资源

django - 使用自定义docker文件组成docker卷

Python Flask 请求 400 错误代码

python - url_for 构建错误

php - PostgreSQL 查询和 PHP 帮助

java - 如何使用变量将数据放入 jdbc 表中?

sql - 索引扫描期间命中+读取的缓冲区过多

sql - PostgreSQL - 显示每个排序组的最后 N 行

python - 如何使用 Docker 容器内的 python 套接字连接到服务器?

python-3.x - 为什么我的 pytest 测试会在删除 SQLAlchemy 数据库之前挂起?