繁体   English   中英

从主机连接到 mongo docker 容器

[英]Connecting to mongo docker container from host

我在 OS X 上运行 Docker:

docker run --name mongo -p 27017:27017 -v ./data/db:/data/db -d mongo mongod

并使用我从中获得的 ip:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' <cid>

在:

var MongoClient = require('mongodb').MongoClient;
var assert = require('assert');
var url = 'mongodb://<ip>:27017';

MongoClient.connect(url, function(err, db) {
   assert.equal(null, err);
   db.close();
});

我得到一个超时错误。

我正在使用来自 Docker Hub 的官方 mongo 存储库。 为了从主机连接,我需要做任何额外的设置吗?

node.js 代码是从容器还是从主机运行?

如果它在主机上,只需使用本地主机地址,即:

var url = 'mongodb://localhost:27017';

这将起作用,因为您使用-p 27017:27017发布了端口。

如果代码在容器内运行,最好重写它以使用链接并按名称引用 mongo 容器,例如:

var url = 'mongodb://mongo:27017';

然后,当您使用 Node.js 代码启动容器时,您可以执行以下操作:

docker run -d --link mongo:mongo my_container

然后 Docker 将在容器内的/etc/hosts添加一个条目,以便名称mongo解析为 mongo 容器的 IP。

如果您使用用户定义的网络,您应该能够在不链接或指定 27017 的情况下获取它

const MONGO_NAME_STR = "mongodb://" + "your_docker_container_name";
var db = {};

mongo_client.connect(MONGO_NAME_STR, function(err, _db){
  //some err handling
  db = _db;
});

任何使用 docker-compose 的人的另一个选择

version: '3.1'
services:
  mongo:
    image: mongo
    container_name: "mongo"
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example
    volumes:
      - './dockervolume/mongodb:/data/db'
    ports:
      - 27017:27017

您可以使用 url 字符串进行连接

    MongoClient.connect("mongodb://root:example@localhost:27017")
        .then(()=>{
            console.log("db connect success");
        })
        .catch((err)=>{
            throw err
        });

使用docker-compose,同样可以实现如下

version: '3.1'

services:

  mongo:
    image: mongo
    restart: always
    ports:
      - 27017:27017
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example

  mongo-express:
    image: mongo-express
    restart: always
    ports:
      - 8081:8081
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: root
      ME_CONFIG_MONGODB_ADMINPASSWORD: example
      ME_CONFIG_MONGODB_URL: mongodb://root:example@mongo:27017/

连接字符串如下,在主机上 -

const uri = "mongodb://root:example@localhost:27017/

在容器上 -

const url = 'mongodb://root:example@mongo:27017'

端口映射可以配置为使用自定义主机端口 [8000],例如 - 8000:27017

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM