Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.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容器内的Mongodb连接错误_Node.js_Mongodb_Docker - Fatal编程技术网

Node.js docker容器内的Mongodb连接错误

Node.js docker容器内的Mongodb连接错误,node.js,mongodb,docker,Node.js,Mongodb,Docker,我一直在尝试获取一个基本的NodeJSAPI来连接到mongo容器。这两个服务都在docker-compose.yml文件中定义。我在这里和docker论坛上读到了无数类似的问题,所有这些问题都表明问题在于您的mongo连接URI。这不是我的问题,你将在下面看到 docker compose.yml version: '3.7' services: api: build: ./ command: npm run start:dev working_dir: /us

我一直在尝试获取一个基本的NodeJSAPI来连接到mongo容器。这两个服务都在docker-compose.yml文件中定义。我在这里和docker论坛上读到了无数类似的问题,所有这些问题都表明问题在于您的mongo连接URI。这不是我的问题,你将在下面看到

docker compose.yml

version: '3.7'

services: 
  api:
    build: ./
    command: npm run start:dev
    working_dir: /usr/src/api-boiler/
    restart: always
    environment: 
      PORT: 3001
      MONGODB_URI: mongodb://mongodb:27017/TodoApp
      JWT_SECRET: asdkasd9a9sdn2r3513032
    links:
      - mongodb
    ports:
      - "3001:3001"
    volumes:
      - ./:/usr/src/api-boiler/ 
    depends_on:
      - mongodb

  mongodb:
    image: mongo
    restart: always
    volumes:
      - /usr/local/var/mongodb:/data/db
    ports:
      - 27017:27017
Dockerfile

FROM node:10.8.0

WORKDIR /usr/src/api-boiler

COPY ./ ./

RUN npm install

CMD ["/bin/bash"]
Successfully built 388868008521
Successfully tagged api-boiler_api:latest
Starting api-boiler_mongodb_1 ... done
Recreating api-boiler_api_1   ... done
Attaching to api-boiler_mongodb_1, api-boiler_api_1
mongodb_1  | 2018-08-20T20:09:27.072+0000 I CONTROL  [main]             Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --    sslDisabledProtocols 'none'
mongodb_1  | 2018-08-20T20:09:27.085+0000 I CONTROL  [initandlisten]     MongoDB starting : pid=1 port=27017 dbpath=/data/db 64-bit     host=72af162616c8
mongodb_1  | 2018-08-20T20:09:27.085+0000 I CONTROL  [initandlisten] db     version v4.0.1
mongodb_1  | 2018-08-20T20:09:27.085+0000 I CONTROL  [initandlisten]     git version: 54f1582fc6eb01de4d4c42f26fc133e623f065fb
mongodb_1  | 2018-08-20T20:09:27.085+0000 I CONTROL  [initandlisten]     OpenSSL version: OpenSSL 1.0.2g  1 Mar 2016
mongodb_1  | 2018-08-20T20:09:27.085+0000 I CONTROL  [initandlisten]     allocator: tcmalloc
mongodb_1  | 2018-08-20T20:09:27.085+0000 I CONTROL  [initandlisten]     modules: none
mongodb_1  | 2018-08-20T20:09:27.085+0000 I CONTROL  [initandlisten]     build environment:
mongodb_1  | 2018-08-20T20:09:27.085+0000 I CONTROL  [initandlisten]         distmod: ubuntu1604
mongodb_1  | 2018-08-20T20:09:27.085+0000 I CONTROL  [initandlisten]         distarch: x86_64
mongodb_1  | 2018-08-20T20:09:27.085+0000 I CONTROL  [initandlisten]         target_arch: x86_64
mongodb_1  | 2018-08-20T20:09:27.085+0000 I CONTROL  [initandlisten]     options: { net: { bindIpAll: true } }
mongodb_1  | 2018-08-20T20:09:27.088+0000 W STORAGE  [initandlisten]     Detected unclean shutdown - /data/db/mongod.lock is not empty.
mongodb_1  | 2018-08-20T20:09:27.093+0000 I STORAGE  [initandlisten]     Detected data files in /data/db created by the 'wiredTiger' storage engine,     so setting the active storage engine to 'wiredTiger'.
mongodb_1  | 2018-08-20T20:09:27.096+0000 W STORAGE  [initandlisten]     Recovering data from the last clean checkpoint.
mongodb_1  | 2018-08-20T20:09:27.097+0000 I STORAGE  [initandlisten]     wiredtiger_open config: create,cache_size=487M,session_max=20000,eviction=    (threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=    (enabled=true,archive=true,path=journal,compressor=snappy),file_manager=    (close_idle_time=100000),statistics_log=(wait=0),verbose=    (recovery_progress),
api_1      |
api_1      | > api-boiler@0.1.0 start:dev /usr/src/api-boiler
api_1      | > cross-env NODE_ENV=development node server/server.js
api_1      |
api_1      | Started on port 3001
api_1      | (node:24) UnhandledPromiseRejectionWarning: MongoError:     failed to connect to server [mongodb:27017] on first connect [MongoError:     connect ECONNREFUSED 172.18.0.2:27017]
db/mongoose.js 设置mongodb连接

但无论什么api容器都无法连接。我尝试将mongo uri设置为0.0.0.0:3001,但没有乐趣。我使用db.serverCmdLineOpts()检查了用于在容器中启动mongo的配置设置。并且,命令bind_ip_all已经传递,因此mongo应该接受来自任何ip的连接。典型的问题是人们忘记用他们的mongo容器名替换localhost。如: mongodb://localhost:27017/TodoApp >> mongodb://mongodb:27017/TodoApp

但是,这已经完成了。太难堪了

日志-用于良好测量

FROM node:10.8.0

WORKDIR /usr/src/api-boiler

COPY ./ ./

RUN npm install

CMD ["/bin/bash"]
Successfully built 388868008521
Successfully tagged api-boiler_api:latest
Starting api-boiler_mongodb_1 ... done
Recreating api-boiler_api_1   ... done
Attaching to api-boiler_mongodb_1, api-boiler_api_1
mongodb_1  | 2018-08-20T20:09:27.072+0000 I CONTROL  [main]             Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --    sslDisabledProtocols 'none'
mongodb_1  | 2018-08-20T20:09:27.085+0000 I CONTROL  [initandlisten]     MongoDB starting : pid=1 port=27017 dbpath=/data/db 64-bit     host=72af162616c8
mongodb_1  | 2018-08-20T20:09:27.085+0000 I CONTROL  [initandlisten] db     version v4.0.1
mongodb_1  | 2018-08-20T20:09:27.085+0000 I CONTROL  [initandlisten]     git version: 54f1582fc6eb01de4d4c42f26fc133e623f065fb
mongodb_1  | 2018-08-20T20:09:27.085+0000 I CONTROL  [initandlisten]     OpenSSL version: OpenSSL 1.0.2g  1 Mar 2016
mongodb_1  | 2018-08-20T20:09:27.085+0000 I CONTROL  [initandlisten]     allocator: tcmalloc
mongodb_1  | 2018-08-20T20:09:27.085+0000 I CONTROL  [initandlisten]     modules: none
mongodb_1  | 2018-08-20T20:09:27.085+0000 I CONTROL  [initandlisten]     build environment:
mongodb_1  | 2018-08-20T20:09:27.085+0000 I CONTROL  [initandlisten]         distmod: ubuntu1604
mongodb_1  | 2018-08-20T20:09:27.085+0000 I CONTROL  [initandlisten]         distarch: x86_64
mongodb_1  | 2018-08-20T20:09:27.085+0000 I CONTROL  [initandlisten]         target_arch: x86_64
mongodb_1  | 2018-08-20T20:09:27.085+0000 I CONTROL  [initandlisten]     options: { net: { bindIpAll: true } }
mongodb_1  | 2018-08-20T20:09:27.088+0000 W STORAGE  [initandlisten]     Detected unclean shutdown - /data/db/mongod.lock is not empty.
mongodb_1  | 2018-08-20T20:09:27.093+0000 I STORAGE  [initandlisten]     Detected data files in /data/db created by the 'wiredTiger' storage engine,     so setting the active storage engine to 'wiredTiger'.
mongodb_1  | 2018-08-20T20:09:27.096+0000 W STORAGE  [initandlisten]     Recovering data from the last clean checkpoint.
mongodb_1  | 2018-08-20T20:09:27.097+0000 I STORAGE  [initandlisten]     wiredtiger_open config: create,cache_size=487M,session_max=20000,eviction=    (threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=    (enabled=true,archive=true,path=journal,compressor=snappy),file_manager=    (close_idle_time=100000),statistics_log=(wait=0),verbose=    (recovery_progress),
api_1      |
api_1      | > api-boiler@0.1.0 start:dev /usr/src/api-boiler
api_1      | > cross-env NODE_ENV=development node server/server.js
api_1      |
api_1      | Started on port 3001
api_1      | (node:24) UnhandledPromiseRejectionWarning: MongoError:     failed to connect to server [mongodb:27017] on first connect [MongoError:     connect ECONNREFUSED 172.18.0.2:27017]

嗯。我已经解决了。在本博客的帮助下-

您需要等待mongod在容器内完全启动。docker-compose.yml中的depen_on键不够

您还需要更新Dockerfile以利用docker compose wait

供参考-这是我更新的docker compose和Dockerfile文件


版本:“3.7”

services: 

  api:
    build: ./
    working_dir: /usr/src/api-boiler/
    restart: always
    environment: 
      PORT: 3001
      MONGODB_URI: mongodb://mongodb:27017/TodoApp
      JWT_SECRET: asdkasd9a9sdn2r3513032
    ports:
      - "3001:3001"
    volumes:
      - ./:/usr/src/api-boiler/ 
    depends_on:
      - mongodb
    environment:
      WAIT_HOSTS: mongodb:27017

  mongodb:
    image: mongo
    container_name: mongodb
    restart: always
    volumes:
     - 27017:27017


嗯。我已经解决了。在本博客的帮助下-

您需要等待mongod在容器内完全启动。docker-compose.yml中的depen_on键不够

您还需要更新Dockerfile以利用docker compose wait

供参考-这是我更新的docker compose和Dockerfile文件


版本:“3.7”

services: 

  api:
    build: ./
    working_dir: /usr/src/api-boiler/
    restart: always
    environment: 
      PORT: 3001
      MONGODB_URI: mongodb://mongodb:27017/TodoApp
      JWT_SECRET: asdkasd9a9sdn2r3513032
    ports:
      - "3001:3001"
    volumes:
      - ./:/usr/src/api-boiler/ 
    depends_on:
      - mongodb
    environment:
      WAIT_HOSTS: mongodb:27017

  mongodb:
    image: mongo
    container_name: mongodb
    restart: always
    volumes:
     - 27017:27017


我们的应用程序基于此,但没有使用
命令:mongod--smallfiles--logpath=/dev/null--quiet
我们使用
命令:mongod--smallfiles--bind_ip_all--logpath=/dev/null--quiet
。谢谢Patryk。进行了一次尝试,但仍然获得MongoError:在第一次连接时未能连接到服务器[mongodb:27027][MongoError:connect-Econrefuse172.18.0.2:27027]你是在使用docker compose up来运行一切吗?我们的应用程序基于此,而不是使用
命令:mongod--smallfiles--logpath=/dev/null--quiet
我们使用
命令:mongod--smallfiles--bind_ip_all--logpath=/dev/null--quiet
。谢谢Patryk。尝试了一下,但仍然得到了MongoError:在第一次连接时未能连接到服务器[MongoError:connect-EconRefuse172.18.0.2:27027],您是否使用了
docker compose-up
来运行所有内容?您的帖子是救命稻草,谢谢!你的帖子是救命稻草,谢谢!