Node.js 在docker compose中等待mongodb不起作用
我正在使用docker compose、nodejs和mongodb 当我运行Node.js 在docker compose中等待mongodb不起作用,node.js,mongodb,docker,docker-compose,Node.js,Mongodb,Docker,Docker Compose,我正在使用docker compose、nodejs和mongodb 当我运行docker compose up时,nodejs在mongo完全运行之前运行,这导致了问题 我编写了以下Dockerfile和dockercompose.yml Dockerfile docker-compose.yml 另外,我威克·多克告诉我以下回音: docker中的回声撰写等待 然后nodejs运行,但最终它返回disconnected 此问题仅在mongodb为localhost时出现 当我输入正常运行的云
docker compose up
时,nodejs在mongo完全运行之前运行,这导致了问题
我编写了以下Dockerfile
和dockercompose.yml
Dockerfile
docker-compose.yml
另外,我威克·多克告诉我以下回音:
docker中的回声撰写等待
然后nodejs运行,但最终它返回disconnected
此问题仅在mongodb为localhost
时出现
当我输入正常运行的云的DB URL时,它工作正常
我做错了什么?如评论中所述,您应该使用服务名称或容器名称而不是localhost
来连接您的mongodb
容器
在您的情况下,node
容器中的localhost:27017
表示node:27017
。因此,由于mongodb
未在node
容器内运行,并且端口27017
未分配给node
容器中的任何服务,那么您将得到错误
您应该将数据库连接信息更改为
mongo:27017
才能工作。只有当mongodb是本地主机时,此问题才会出现。
这是什么意思?@nobbynobs我已指定运行mongo db的urlmongodb://localhost:27017/db. 在这种情况下,会出现问题。请使用mongo:27017
。容器中的Localhost它是容器本身。@nobbynobs我提到的Mongo DB URL是将用于实际应用程序的DB连接的URL。我应该在运行真正服务器的应用程序的URL中使用mongo:27017吗?不,应该为每个特定情况使用合适的连接字符串。对于docker compose,您有两个docker容器—您的应用程序和mongo
,因此您的应用程序将通过mongo:27017
连接到数据库。您可以通过环境变量设置连接strint,如著名的。
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:
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] --------------------------------------------------------