[英]Connection between docker containers: need to put gateway instead of name of container, why?
我正在為自己測試東西,但遇到了問題:嘗試將 nodeexpress 容器(應用程序)連接到 mongo 容器(數據庫),如果我連接到localhost:27017
但無法連接到 nodeexpress 的容器,我可以從 MongoCompose 連接到 mongo使用 mongoose 配置 url 連接數據庫,如'mongodb://localhost:27017/dbtest'
。
所以我查看了 SO 一些解決方案(像這樣)並回答我看到的是而不是'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
你從哪里得到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:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.