[英]Waiting for mongodb in docker-compose does not work
我正在使用 docker-compose、nodejs、mongodb。
当我运行docker-compose up
,nodejs 在 mongo 完全运行之前运行,这导致了问题。
我写了以下Dockerfile
和docker-compose.yml
。
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
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 告诉我以下回声:
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.