繁体   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