docker-compose节点应用无法到达mongo

时间:2019-10-07 02:01:14

标签: node.js mongodb docker docker-compose gitlab

我的Docker容器出现奇怪的连接问题。

这是我的compose.yaml

version: "3.3"
services:
  node-app:
    image: "${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHA}"
    container_name: "node-app"
    depends_on:
      - mongo
    env_file: ./config/.env
    ports:
      - 43332:43332
    networks:
      - app-network
    environment:
      WAIT_HOSTS: mongo:27017
  mongo:
    container_name: "app-mongo"
    image: mongo:4.0
    volumes:
      - /data/db:/data/db
    ports:
      - 27017:27017
    networks:
      - app-network
networks:
  app-network:

所以我试图建立一个CI / CD管道,它要做的第一件事是在推送代码时运行测试。管道运行此命令docker-compose run --rm app-node npm run test

但是它不断出现以下错误。

MongoNetworkError: failed to connect to server [mongo:27017] on first connect [MongoNetworkError: connection 0 to mongo:27017 timed out]

我的应用程序就这样连接到mongo

        mongoose.connect('mongodb://mongo:27017', { useNewUrlParser: true });
        mongoose.Promise = global.Promise;
        mongoose.connection.on('error', error => {
            logMe(error);
            process.exit(1);
        });

奇怪的是,我可以看到应用容器本身可以在操作系统级别通过其服务名称('mongo')与mongo conatiner进行通信。

因此,如果我运行此命令docker-compose run --rm app-node ping -c 1 mongo,则ping操作成功。

它在以下环境下运行

$ docker -v
Docker version 18.09.7, build 2d0083d

$ docker-compose version
docker-compose version 1.24.1, build 4667896b
docker-py version: 3.7.3
CPython version: 3.6.8
OpenSSL version: OpenSSL 1.1.0j  20 Nov 2018

我可能做错了什么?任何帮助表示赞赏。

0 个答案:

没有答案