postgresql - 带有 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
解决方案
你的 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
希望有帮助!
推荐阅读
- django - 在 ubuntu 服务器 16.04 上安装 psycopg2 时出错
- angularjs - $http get api 响应在 angularJS 中未定义
- html - 有没有从 ASP.NET 服务器访问隐藏文件的方法?
- javascript - Vuex getter + 开发工具
- c# - 我必须安装或修改什么来修复 CS1543、Visual Studio 2015 错误?
- firebase - 是否可以在特定集合上查询 collectionGroup?
- python - Selenium Python在不同条件下将Text-var链接到子子项中的Value-var
- database - 如何使用虚拟表分配 ID?
- php - 试图在 foreach 循环中获取非对象的属性
- c# - Xamarin 比 listview 更快