docker容器之间的连接:需要放置网关而不是容器名称,为什么?

时间:2020-01-30 17:12:08

标签: docker docker-compose dockerfile

我自己进行了测试,但遇到了问题:尝试将nodeexpress容器(应用程序)连接到mongo容器(数据库),如果我连接到localhost:27017,但可以从MongoCompose连接到mongo,但不能进入带有猫鼬配置url的nodeexpress容器中,以连接'mongodb://localhost:27017/dbtest'这样的数据库。

因此,我查看了一些解决方案(例如this),并回答了我看到的而不是'mongodb://localhost:27017/dbtest'的问题,我需要写出容器'mongodb://mymongo:27017/dbtest'的名称,但是对于我这没用,只收到ECONNREFUSED错误。

容器位于同一网络中,这是我的dockerfile和docker-compose文件。

Dockerfile

#node 8.16.2
FROM node:8.16.2
COPY . /app
WORKDIR /app
RUN npm install
EXPOSE 3000
CMD ["npm","start"]

docker-compose.yaml

version: "3.7"
services:
   db:
    image: mongo
    ports:
        - 27017:27017
    networks:
        - testing
   app:
    build:
        context: .
        dockerfile: Dockerfile
    networks: 
        - testing
networks: 
    testing:

解决了类似mongodb://172.17.0.1:27017/dbtest 的问题,其中172.17.0.1是作为容器的网络的网关

有人可以解释这种行为,如果正确的话? 平台Linux

1 个答案:

答案 0 :(得分:0)

您从哪里获得的名称mymongo?您已在撰写文件中将mongodb服务的名称定义为db。因此,请使用连接字符串'mongodb://db:27017/dbtest'

version: "3.7"
services:
   db:        ---------------> This is the name of your mongo service
    image: mongo
    ports:
        - 27017:27017
    networks:
        - testing
   app:
    build:
        context: .
        dockerfile: Dockerfile
    networks: 
        - testing
networks: 
    testing: