簡體   English   中英

在 docker-compose 中等待 mongodb 不起作用

[英]Waiting for mongodb in docker-compose does not work

我正在使用 docker-compose、nodejs、mongodb。

當我運行docker-compose up ,nodejs 在 mongo 完全運行之前運行,這導致了問題。

我寫了以下Dockerfiledocker-compose.yml

Dockerfile

FROM node:12

RUN mkdir /usr/app
WORKDIR /usr/app

COPY . /usr/app

RUN npm install

EXPOSE 8000

## Add the wait script to the image
ADD https://github.com/ufoscout/docker-compose-wait/releases/download/2.8.0/wait /wait
RUN chmod +x /wait

CMD /wait && npm run prod

docker-compose.yml

version: "3"

services:
  node:
    container_name: node
    links:
      - mongo
    depends_on:
      - mongo
    env_file: .env
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "80:8000"
    restart: unless-stopped
  mongo:
    container_name: mongo
    image: mongo:4.0-xenial
    ports:
      - "27017:27017"
    restart: unless-stopped
    volumes:
      - mongodb:/data/db
volumes:
  mongodb:

我也 wick docker-compose-wait 告訴我以下回聲:

在 docker-compose-wait 中回顯

node     | [INFO  wait] Host mongo:27017 is now available!
node     | [INFO  wait] --------------------------------------------------------
node     | [INFO  wait] docker-compose-wait - Everything's fine, the application can now start!
node     | [INFO  wait] --------------------------------------------------------

之后 nodejs 運行,但最終它返回斷開連接。

僅當 mongodb 為localhost時才會出現此問題。

當我進入正常運行的雲的DB URL時,它工作正常。

我究竟做錯了什么?

正如NobbyNobbs在評論中提到的,您應該使用服務名稱或容器名稱而不是localhost來連接到您的mongodb容器。

在您的情況下, node容器中的localhost:27017表示node:27017 因此,由於mongodb沒有在node容器內運行,並且端口27017沒有分配給node容器中的任何服務,那么你會得到錯誤。

您應該將數據庫連接信息更改為mongo:27017才能工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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