【问题标题】:Docker + MongoDB: How to view database with RoboMongo?Docker + MongoDB:如何使用 RoboMongo 查看数据库?
【发布时间】:2017-01-03 11:02:48
【问题描述】:

如何访问 Docker 使用 RoboMongo 或类似工具创建的 mongo 数据库?

在使用 Doncker 之前,我已经将 mongodb 安装到我的 Linux 机器中。所以我不能在 docker-compse.yml 中使用端口“27017:27017”。我使用“27018:27018”:

version: "2"
services:
  web:
    build: .
    ports:
      - "3000:3000"
    links:
      - mongo
  mongo:
    image: mongo
    volumes:
      - /data/mongodb/db:/data/db
    ports:
      - "27018:27018"

我可以使用 RoboMongo 查看我在我的 pre-docker mongo 中创建的所有数据库。但是我怎样才能访问 Docker 的呢?

这是我的 DockerFile:

FROM mhart/alpine-node:latest
ADD package.json /tmp/package.json
RUN cd /tmp && npm install
RUN mkdir -p /opt/app && cp -a /tmp/node_modules /opt/app/

WORKDIR /opt/app
ADD . /opt/app

EXPOSE 3000

CMD ["npm", "start"]

编辑:

当我在终端上运行 docker 时:

$ docker-compose up
Starting dummyapp_mongo_1
Recreating dummyapp_web_1
Attaching to dummyapp_mongo_1, dummyapp_web_1
mongo_1  | 2017-01-03T10:20:35.083+0000 I CONTROL  [initandlisten] MongoDB starting : pid=1 port=27017 dbpath=/data/db 64-bit host=571498710dc0
mongo_1  | 2017-01-03T10:20:35.083+0000 I CONTROL  [initandlisten] db version v3.4.1
mongo_1  | 2017-01-03T10:20:35.083+0000 I CONTROL  [initandlisten] git version: 5e103c4f5583e2566a45d740225dc250baacfbd7
mongo_1  | 2017-01-03T10:20:35.083+0000 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.1t  3 May 2016
mongo_1  | 2017-01-03T10:20:35.083+0000 I CONTROL  [initandlisten] allocator: tcmalloc
mongo_1  | 2017-01-03T10:20:35.083+0000 I CONTROL  [initandlisten] modules: none
mongo_1  | 2017-01-03T10:20:35.083+0000 I CONTROL  [initandlisten] build environment:
mongo_1  | 2017-01-03T10:20:35.083+0000 I CONTROL  [initandlisten]     distmod: debian81
mongo_1  | 2017-01-03T10:20:35.083+0000 I CONTROL  [initandlisten]     distarch: x86_64
mongo_1  | 2017-01-03T10:20:35.083+0000 I CONTROL  [initandlisten]     target_arch: x86_64
mongo_1  | 2017-01-03T10:20:35.083+0000 I CONTROL  [initandlisten] options: {}
mongo_1  | 2017-01-03T10:20:35.104+0000 I -        [initandlisten] Detected data files in /data/db created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'.
mongo_1  | 2017-01-03T10:20:35.104+0000 I STORAGE  [initandlisten] 
mongo_1  | 2017-01-03T10:20:35.104+0000 I STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
mongo_1  | 2017-01-03T10:20:35.104+0000 I STORAGE  [initandlisten] **          See http://dochub.mongodb.org/core/prodnotes-filesystem
mongo_1  | 2017-01-03T10:20:35.104+0000 I STORAGE  [initandlisten] wiredtiger_open config: create,cache_size=1454M,session_max=20000,eviction=(threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics_log=(wait=0),
mongo_1  | 2017-01-03T10:20:36.385+0000 I CONTROL  [initandlisten] 
mongo_1  | 2017-01-03T10:20:36.385+0000 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
mongo_1  | 2017-01-03T10:20:36.385+0000 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
mongo_1  | 2017-01-03T10:20:36.385+0000 I CONTROL  [initandlisten] 
mongo_1  | 2017-01-03T10:20:36.385+0000 I CONTROL  [initandlisten] 
mongo_1  | 2017-01-03T10:20:36.385+0000 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
mongo_1  | 2017-01-03T10:20:36.385+0000 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
mongo_1  | 2017-01-03T10:20:36.385+0000 I CONTROL  [initandlisten] 
mongo_1  | 2017-01-03T10:20:36.385+0000 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
mongo_1  | 2017-01-03T10:20:36.385+0000 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
mongo_1  | 2017-01-03T10:20:36.385+0000 I CONTROL  [initandlisten] 
mongo_1  | 2017-01-03T10:20:36.389+0000 I FTDC     [initandlisten] Initializing full-time diagnostic data capture with directory '/data/db/diagnostic.data'
mongo_1  | 2017-01-03T10:20:36.390+0000 I NETWORK  [thread1] waiting for connections on port 27017
web_1    | 
web_1    | > dummy-app@0.0.0 start /opt/app
web_1    | > node ./bin/www

编辑 2:

当我使用 GET http://localhost:3000/data/from/db 或 POST http://localhost:3000/data/into/db 时,将端口更改为“27018:27017”后出现以下新错误:

failed to connect to server [mongo:27017] on first connect

MongoError: failed to connect to server [mongo:27017] on first connect
    at Pool.<anonymous> (/opt/app/node_modules/mongodb-core/lib/topologies/server.js:325:35)
    at emitOne (events.js:96:13)
    at Pool.emit (events.js:188:7)
    at Connection.<anonymous> (/opt/app/node_modules/mongodb-core/lib/connection/pool.js:270:12)
    at Connection.g (events.js:292:16)
    at emitTwo (events.js:106:13)
    at Connection.emit (events.js:191:7)
    at Socket.<anonymous> (/opt/app/node_modules/mongodb-core/lib/connection/connection.js:173:49)
    at Socket.g (events.js:292:16)
    at emitOne (events.js:96:13)

有什么想法吗?

【问题讨论】:

    标签: mongodb docker docker-compose dockerfile


    【解决方案1】:

    你确定你的 mongodb 在容器的 27018 端口上监听吗?仅根据您帖子中的信息,我猜测 mongodb 正在容器内侦听其默认端口 27017,并且您将主机 27018 映射到 mongo 未侦听的容器 27018。 ports 项应如下所示:27018:27017 以便主机上未使用的端口 27018 映射到容器上的正确端口 27017。

    这种暴露与 npm 容器无关,因为它使用不同的机制来暴露端口,并在容器之间建立链接。您会发现,如果您将其他 mongodb 客户端放入容器中,则链接也适用于它们。但是要从主机进行交互,您需要将容器中的正确端口公开给主机上的可用端口。

    https://docs.docker.com/compose/compose-file/#/ports

    【讨论】:

    • 我认为你是对的 - 请参阅上面的编辑。我不知道那些台词真的想说什么。但无论如何,我都可以看到使用 RoboMongo 在 Docker 下创建的数据库。有什么想法吗?
    • 请问 - 27018:27017 中的 27018 和 27017 指的是什么?
    • docs.docker.com/compose/compose-file/#/ports 说明第一个数字是主机上要转发的端口,第二个是容器上要转发的端口。就 docker 而言,它们不必有所不同,但在您的情况下,主机已经在使用 27017,因此您必须更改它。该链接提供了更多信息。
    • 这次你告诉你的客户robomongo连接27018了吗?
    • host 是运行 docker 的系统。容器是运行 in docker 的系统。在docker内部,mongo在27017上运行。所以你说,主机上的27018,应该转发到容器中的27017。你用 npm 做同样的事情,但是在默认情况下 npm 侦听的端口 3000 上,并且那里没有冲突,所以你可以使用相同的端口。如果这有点过头了,您可能想熟悉一下 tcp/ip 端口的概念,这应该会让您一目了然。
    猜你喜欢
    • 1970-01-01
    • 2015-04-01
    • 2016-12-28
    • 2016-06-13
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    • 2020-04-30
    • 2015-04-04
    相关资源
    最近更新 更多