You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab CI无法连接Docker部署的MongoDB问题求助

问题排查与解决指南

嘿,我来帮你梳理下这个连接失败的问题,主要是两个核心点出了错:GitLab CI Job的网络隔离机制,还有Docker Compose配置里的参数混淆,咱们一步步来搞定:

1. 先修正Docker Compose里的明显错误

看你的MongoDB服务配置,environment块里重复写了MONGO_INITDB_DATABASE,第二个值password直接覆盖了第一个mybase,这会导致MongoDB初始化的数据库变成password,完全不是你想要的mybase。另外,你设置root密码的逻辑也有点混淆,把密码和数据库名搞混了。修正后的配置应该是这样:

give_sync_test:
  image: mongo:4.2.10
  restart: always
  environment:
    MONGO_INITDB_DATABASE: mybase  # 这是你要初始化的目标数据库
    MONGO_INITDB_ROOT_USERNAME: admin  # 明确root用户名,默认也是root,但写上更清晰
    MONGO_INITDB_ROOT_PASSWORD: password  # 这是root用户的登录密码
  ports:
    - 27017:27017

2. GitLab CI无法连接MongoDB的核心原因:网络隔离

这是最容易踩坑的点:GitLab CI的每个Job都是运行在独立的Docker容器里的,这些容器和你用docker-compose up启动的MongoDB容器根本不在同一个网络环境里!所以你在Job里用localhost:27017去访问,相当于在自己的Job容器里找MongoDB,当然会连接拒绝。

这里给你两种可行的解决办法:

方案一:在GitLab CI Job里直接启动MongoDB(推荐)

不需要依赖外部启动的容器,直接用GitLab CI的services字段在test阶段启动MongoDB服务,这样Job容器和MongoDB容器会自动加入同一个内部网络,直接用服务名就能访问:

test:
  stage: test
  dependencies:
    - maven_build_snapshot
  image: 'my_image:latest'
  # 在这里启动MongoDB服务
  services:
    - name: mongo:4.2.10
      alias: mongodb  # 给服务起个别名,方便后面连接
  # 设置MongoDB的初始化参数
  variables:
    MONGO_INITDB_DATABASE: mybase
    MONGO_INITDB_ROOT_USERNAME: admin
    MONGO_INITDB_ROOT_PASSWORD: password
  before_script:
    - apt-get update
    - apt-get -y install git mongodb-clients  # 确保安装了mongo客户端工具
  script:
    # 注意这里用的是服务别名mongodb,不是localhost
    - mongo "mongodb://admin:password@mongodb:27017/mybase" < ./utils/test

另外提醒下:你的utils/test里写的是use myBase;,MongoDB在Linux环境下数据库名是区分大小写的,你初始化的是mybase,这里写成myBase会创建一个新的空数据库,建议改成use mybase;保持一致。

方案二:让Job容器加入外部MongoDB的网络

如果你一定要用之前docker-compose启动的那个MongoDB,得让GitLab Runner的Job容器加入到MongoDB所在的Docker网络里:

  1. 先查一下你的MongoDB容器所在的网络名称:

    docker network ls
    # 通常docker-compose创建的网络是<你的项目目录名>_default,比如你的项目叫give_sync,那网络名就是give_sync_default
    
  2. 然后在GitLab CI的Job配置里指定这个网络,同时用MongoDB的服务名(give_sync_test)作为主机名访问:

    test:
      stage: test
      dependencies:
        - maven_build_snapshot
      image: 'my_image:latest'
      # 指定要加入的Docker网络
      network: <你的docker-compose网络名称>
      before_script:
        - apt-get update
        - apt-get -y install git mongodb-clients
      script:
        # 这里用服务名give_sync_test代替localhost
        - mongo "mongodb://admin:password@give_sync_test:27017/mybase" < ./utils/test
    

最后再检查下

把上面的配置改完后,记得先重启你的docker-compose服务,然后重新跑GitLab CI的test Job,应该就能正常连接了。


内容的提问来源于stack exchange,提问作者RVA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:44:06