我的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
我可能做错了什么?任何帮助表示赞赏。