Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.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
Javascript 无法将节点docker容器连接到mongo docker容器_Javascript_Node.js_Mongodb_Docker_Networking - Fatal编程技术网

Javascript 无法将节点docker容器连接到mongo docker容器

Javascript 无法将节点docker容器连接到mongo docker容器,javascript,node.js,mongodb,docker,networking,Javascript,Node.js,Mongodb,Docker,Networking,我得到这个错误: Server running... { MongoNetworkError: failed to connect to server [mongo:27017] on first connect [MongoNetworkError: getaddrinfo EAI_AGAIN mongo mongo:27017] at Pool.<anonymous> (/usr/src/app/node_modules/mongodb-core/lib/topologi

我得到这个错误:

Server running...
{ MongoNetworkError: failed to connect to server [mongo:27017] on first connect [MongoNetworkError: getaddrinfo EAI_AGAIN mongo mongo:27017]
    at Pool.<anonymous> (/usr/src/app/node_modules/mongodb-core/lib/topologies/server.js:562:11)
    at Pool.emit (events.js:182:13)
    at Connection.<anonymous> (/usr/src/app/node_modules/mongodb-core/lib/connection/pool.js:316:12)
    at Object.onceWrapper (events.js:273:13)
    at Connection.emit (events.js:182:13)
    at Socket.<anonymous> (/usr/src/app/node_modules/mongodb-core/lib/connection/connection.js:245:50)
    at Object.onceWrapper (events.js:273:13)
    at Socket.emit (events.js:182:13)
    at emitErrorNT (internal/streams/destroy.js:82:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:50:3)
    at process._tickCallback (internal/process/next_tick.js:63:19)
  name: 'MongoNetworkError',
  message:
   'failed to connect to server [mongo:27017] on first connect [MongoNetworkError: getaddrinfo EAI_AGAIN mongo mongo:27017]',
  errorLabels: [ 'TransientTransactionError' ],
  [Symbol(mongoErrorContextSymbol)]: {} }
以下是我尝试从节点脚本连接的方式:

mongoose
  .connect(
    'mongodb://127.0.0.1:27017/test2',
    { useNewUrlParser: true }
  )
  .then(() => console.log('MongoDB Connected'))
  .catch(err => console.log("errorErrorError"));
这是docker容器ls-a的输出

6f14a98e2d51        dockernodemongo_app       "npm start"              11 minutes ago      Up 11 minutes           0.0.0.0:3001->3000/tcp                     docker-node-mongo
f3fb55dad886        mongo                     "docker-entrypoint.s…"   24 minutes ago      Up 24 minutes           127.0.0.1:27017->27017/tcp                 mongo
这是我如何从另一个docker-compose.yml文件运行mongo的:

    mongo:
        restart: always
        image: mongo
        container_name: mongo
        network_mode: "bridge"
#        expose:
#           - 27017
        volumes:
            - ./mongo_data:/data/db
        ports:
            - "127.0.0.1:27017:27017"

您无法通过这种方式将应用程序连接到mongo
127.0.0.1
指的是容器的本地主机,而不是主机。您有两个选择:

  • 创建一个容器并向其中添加两个容器。然后使用
    mongodb://mongo:27017/test2
    到达mongo集装箱。Docker将使用服务名称作为主机,以便您可以通过该名称访问它

  • 将mongo绑定到0.0.0.0(在端口声明中省略127.0.0.1),并使用网桥ip地址连接到数据库

考虑第一个选项,因为如果您没有防火墙,第二个选项将向internet公开mongo数据库

例如:

version: '3.5'
services:
  app:
    container_name: docker-node-mongo
    restart: always
    build: .
    ports:
      - '3001:3000'
    networks:
      - mongo

networks:
  mongo:
    external: true
然后在mongo compose文件上:

version: '3.5'
services:
  mongo:
    restart: always
    image: mongo
    container_name: mongo
    expose:
      - 27017
    volumes:
      - ./mongo_data:/data/db
    ports:
      - "127.0.0.1:27017:27017"
    networks:
      - mongo

networks:
  mongo:
    name: mongo
然后在代码上:

mongoose
  .connect(
    'mongodb://mongo:27017/test2',
    { useNewUrlParser: true }
  )
  .then(() => console.log('MongoDB Connected'))
  .catch(err => console.log("errorErrorError"));

编辑:更新的网络名称

问题是,我运行的sharelatex需要mongo,我想运行的节点也需要mongo。因此,您建议运行2个mongo?@KTWorks实例,为什么会出现问题?您既可以在主机上发布端口,也可以创建网络,以便其他容器可以连接到该服务。确定。你说在主机上发布端口是安全问题?“您可以在主机上发布端口”是什么意思?2个mongo实例?我的意思是,使用27017:27017将绑定到主机上的0.0.0.0,如果您没有配置防火墙,任何人都可以从internet连接到mongo,这就是为什么我不建议使用该路径。我将用一个更完整的例子更新我的答案。你说的手是什么意思?自己的docker编写文件?
mongoose
  .connect(
    'mongodb://mongo:27017/test2',
    { useNewUrlParser: true }
  )
  .then(() => console.log('MongoDB Connected'))
  .catch(err => console.log("errorErrorError"));