Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在docker compose中等待mongodb不起作用_Node.js_Mongodb_Docker_Docker Compose - Fatal编程技术网

Node.js 在docker compose中等待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、nodejs和mongodb

当我运行
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] --------------------------------------------------------