簡體   English   中英

docker容器之間的連接:需要放置網關而不是容器名稱,為什么?

[英]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"]

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

你從哪里得到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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM