我自己进行了测试,但遇到了问题:尝试将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文件。
#node 8.16.2
FROM node:8.16.2
COPY . /app
WORKDIR /app
RUN npm install
EXPOSE 3000
CMD ["npm","start"]
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
答案 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: