docker - 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)
解决方案
您可以为 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 .
推荐阅读
- c - c 中的 gethostbyname 可与 gethostbyname("www.google.com") 一起使用,但不适用于我的 char *
- laravel - 升级到 Laravel 5.3 - Mail::send 现在从 Mandrill 返回 null
- mysql - 在 .net core 中使用 pomelo.entityframeworkcore.mysql 调用存储过程
- machine-learning - 在成对学习排名中,相关性得分和成本函数背后的基本假设是什么?
- php - 在没有 CSS 的情况下删除顶部的类别名称
- python - 导入win32api时找不到模块
- cloud - 如何下载整个阿里巴巴OSS Bucket?
- jquery - 如何重新定位表单验证器错误
- android - android studio新项目结帐中GIT和GITHub的区别?
- sql-server - 水平扩展 SQL Server 数据库