【发布时间】:2021-06-07 13:26:42
【问题描述】:
我正在尝试在 Gitlab CI/CD 中设置一些集成测试 - 为了运行这些测试,我想使用 Gitlab 运行器和 docker-compose up 重建我的系统(几个链接的容器)。我的系统是由几个通过mqtt相互通信的容器和一个被其他容器查询的InfluxDB容器组成的。
我已经设法让跑步者实际执行 docker-compose up 并创建所有相关容器。这是我的 .gitlab-ci.yml 文件:
image: docker:19.03
variables:
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: "/certs"
services:
- name: docker:19.03-dind
alias: localhost
before_script:
- docker info
integration-tests:
stage: test
script:
- apk add --no-cache docker-compose
- docker-compose -f "docker-compose.replay.yml" up -d --build
- docker exec moderator-monitor_datareplay_1 bash -c 'cd src ; python integration_tests.py'
如您所见,我正在安装 docker-compose,在我的配置 yml 文件上运行 compose,然后从其中一个容器中执行我的集成测试。当我在本地系统上运行最后一行时,集成测试按预期运行;然而,在 CI/CD 环境中,所有测试都会抛出一些ConnectionRefusedError: [Errno 111] Connection refused 错误。运行 docker-compose ps 似乎显示所有相关容器都正常运行。
我发现问题源于每次一个容器尝试通过self.localClient = InfluxDBClient("influxdb", 8086, database = "replay") 或client.connect("mosquitto", 1883, 60) 之类的行与另一个容器进行通信。这在我的本地 docker 环境中运行良好,因为地址名称解析为正在运行的其他容器,但似乎在这个 Docker-in-Docker 设置中产生了问题。有没有人有什么建议?这个dind环境中的容器有不同的名字吗?
还值得一提的是,这可能是我的 docker-compose.yml 文件未正确配置以启动健康容器的问题。 docker-compose ps 表示它们已启动,但有没有更好的方法来检查它们是否正常运行?这是我的 docker-compose 文件的摘录:
services:
datareplay:
networks:
- web
- influxnet
- brokernet
image: data-replay
build:
context: data-replay
volumes:
- ./data-replay:/data-replay
mosquitto:
image: eclipse-mosquitto:latest
hostname: mosquitto
networks:
- web
- brokernet
networks:
web:
influxnet:
internal: true
brokernet:
driver: bridge
internal: true
【问题讨论】:
标签: docker docker-compose gitlab containers gitlab-ci