首页 > 解决方案 > GitLab CI:docker 容器无法连接到 MongoDB 服务

问题描述

在 GitLab CI 管道中,我需要将我自己的 C++ 代码从 docker 容器连接到作为服务运行的 MongoDB,但我无法连接。

这是一个显示问题的最小 gitlab-ci.yml 示例:

stages:
  - connect1
  - connect2

image: docker:latest

variables:
  MONGOIMAGE: "mongo:4.2.3-bionic"
  MONGO_INITDB_ROOT_USERNAME: "root"
  MONGO_INITDB_ROOT_PASSWORD: "geheim"

connect1:
  stage: connect1
  services:
    - name: $MONGOIMAGE
  image: mongo
  script:
    - mongo --host mongo --username $MONGO_INITDB_ROOT_USERNAME --password $MONGO_INITDB_ROOT_PASSWORD --eval "db.help()"

connect2:
  stage: connect2
  services:
    - name: $MONGOIMAGE
  script:
    - docker run --rm mongo mongo --host mongo --username $MONGO_INITDB_ROOT_USERNAME --password $MONGO_INITDB_ROOT_PASSWORD --eval "db.help()"

connect2的错误信息是找不到主机:

connecting to: mongodb://mongo:27017/?compressors=disabled&gssapiServiceName=mongodb
2020-06-04T16:20:47.614+0000 E  QUERY    [js] Error: couldn't connect to server mongo:27017, connection attempt failed: HostNotFound: Could not find address for mongo:27017: SocketException: Host not found (authoritative) :
connect@src/mongo/shell/mongo.js:341:17
@(connect):2:6
2020-06-04T16:20:47.615+0000 F  -        [main] exception: connect failed
2020-06-04T16:20:47.615+0000 E  -        [main] exiting with code 1

我已经尝试过,--host localhost但这正在工作。如何实现docker run以 connect2 开头的容器可以连接到 MongoDB 服务?

标签: mongodbdockercontinuous-integrationgitlab

解决方案


最后我找到了解决方案:

connect2:
  stage: connect2
  services:
    - name: $MONGOIMAGE
  script:
    - ping mongo -c 5
    - docker run --rm mongo mongo --add-host mongo:`cat /etc/hosts | grep mongo | awk '{print $1}'` --net host --username $MONGO_INITDB_ROOT_USERNAME --password $MONGO_INITDB_ROOT_PASSWORD --eval "db.help()"

推荐阅读