首页 > 解决方案 > Gitlab CI 服务访问

问题描述

我想在 gitlab ci 中使用 mongo db 访问测试我的 nodejs 应用程序。因此我设置了一个 mongo 服务并尝试连接到它。文档说,它应该可以通过主机名访问。但似乎,我的应用程序没有找到 mongo 服务。是否有可能明确映射端口?由于 Dockerimage 公开了 27017,但我不知道 gitlab 在幕后做了什么。

.gitlab-ci.yml

test:
  stage: test
  image: docker:latest
  services:
    - docker:dind
    - mongo:latest
  variables:
    MONGO_INITDB_ROOT_USERNAME: test
    MONGO_INITDB_ROOT_PASSWORD: test
  before_script:
    - docker build -t app -f Dockerfile.test .
  script:
    - docker run app  npm run test

错误

MongoNetworkError: failed to connect to server [mongo:27017] on first connect [MongoNetworkError: getaddrinfo ENOTFOUND mongo mongo:27017]
    at Pool.<anonymous> (/usr/src/app/node_modules/mongodb-core/lib/topologies/server.js:564:11)
    at emitOne (events.js:116:13)
    at Pool.emit (events.js:211:7)
    at Connection.<anonymous> (/usr/src/app/node_modules/mongodb-core/lib/connection/pool.js:317:12)
    at Object.onceWrapper (events.js:317:30)
    at emitTwo (events.js:126:13)
    at Connection.emit (events.js:214:7)
    at Socket.<anonymous> (/usr/src/app/node_modules/mongodb-core/lib/connection/connection.js:246:50)
    at Object.onceWrapper (events.js:315:30)
    at emitOne (events.js:116:13)
    at Socket.emit (events.js:211:7)
    at emitErrorNT (internal/streams/destroy.js:64:8)
    at _combinedTickCallback (internal/process/next_tick.js:138:11)
    at process._tickCallback (internal/process/next_tick.js:180:9)

标签: dockercontinuous-integrationgitlabgitlab-ci

解决方案


您可以为 mongo 服务的主机名配置别名:

services:
  - name: docker:dind
  - name: mongo:latest
    alias: mongo

否则,您可以转发您的 mongo 端口:

  before_script:
    - apt install -y socat 
    - socat tcp-listen:27017,fork tcp:mongo:27017 &
    - docker build -t app -f Dockerfile.test .

推荐阅读