【问题标题】:Mongodb database could not be created on docker container startupdocker容器启动时无法创建mongodb数据库
【发布时间】:2020-07-30 12:01:27
【问题描述】:

我正在尝试使用其中的集合及其自己的新用户来初始化 Mongodb 数据库。

我已点击以下SO 链接,但无法从主机连接到数据库。

如果我打开 Mongodb Shell,我将无法找到我新创建的数据库和用户。

场景 1

Docker 文件

FROM mongo:latest

ENV MONGO_INITDB_ROOT_USERNAME admin-user
ENV MONGO_INITDB_ROOT_PASSWORD admin-password
ENV MONGO_INITDB_DATABASE admin

ADD mongo-init.js /docker-entrypoint-initdb.d/

mongo-init.js

db.auth('admin-user', 'admin-password')

db = db.getSiblingDB('test-database')

db.createUser({
  user: 'test-user',
  pwd: 'test-password',
  roles: [
    {
      role: 'readWrite',
      db: 'test-database',
    },
  ],
});

db.foo.insert({ x: 1, y: 1 })

我有 linux ubuntu。我使用了以下命令:

docker image build -t image1:1.0 .
docker run -d -p 27017-27019:27017-27019 --name image1 mongo

对于上述情况Neo Anderson 答案完美。现在我有另一个场景:

场景 2:

如果我尝试从容器外部连接我的容器 Mongodb,我将无法连接。无法连接到172.20.1.100:37019。虽然我也将运行命令更改为run -d -p 37017:27017-27019

【问题讨论】:

  • 最好将 docker-compose 与 express 客户端一起使用,而不是维护自己的图像。

标签: mongodb docker


【解决方案1】:

问题似乎出在您的docker run 命令中。
您正在构建映像 image1:1.0,但您正在使用 mongo 映像运行容器。
--name 定义容器名称。 docker run 命令的最后一个参数指的是要使用的图像。

运行容器

docker run -d -p 27017-27019:27017-27019 --name my-awesome-container image1:1.0

列出容器:您需要containerID 在下一步打开控制台:

docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                  NAMES
b48ba39b0d38        image1:1.0          "docker-entrypoint.s…"   15 minutes ago      Up 15 minutes       0.0.0.0:27017-27019->27017-27019/tcp   my-awesome-container

连接到 my-awesome-container:

docker exec -ti b48ba39b0d38 sh

使用以下命令连接到数据库:(在要求输入密码时使用 admin-password

mongo --username admin-user
MongoDB shell version v4.2.8
Enter password: 
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("17b28c1e-edb7-4c41-93bd-bdc3abcb47a6") }
MongoDB server version: 4.2.8
Server has startup warnings: 
2020-07-30T12:20:09.577+0000 I  STORAGE  [initandlisten] 
2020-07-30T12:20:09.577+0000 I  STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2020-07-30T12:20:09.577+0000 I  STORAGE  [initandlisten] **          See http://dochub.mongodb.org/core/prodnotes-filesystem
---
Enable MongoDB's free cloud-based monitoring service, which will then receive and display
metrics about your deployment (disk utilization, CPU, operation statistics, etc).

The monitoring data will be available on a MongoDB website with a unique URL accessible to you
and anyone you share the URL with. MongoDB may use this information to make product
improvements and to suggest MongoDB products and deployment options to you.

To enable free monitoring, run the following command: db.enableFreeMonitoring()
To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---

> 

列出数据库:

> show databases
admin          0.000GB
config         0.000GB
local          0.000GB
test-database  0.000GB

享受使用您使用mongo-init.js 创建的测试数据库的乐趣

【讨论】:

  • 好的,让我检查一下,我会在一分钟内回复。
  • my-awesome-container 里面应该有什么? @NeoAnderson
  • 这是你想给容器起的名字。它是可选的。如果这可以简化事情,只需将其删除。 Docker 将自动为该容器生成。澄清一点:当您使用docker build 时,您创建了一个名为image1:1.0 的图像。稍后,您可以从该映像部署任意数量的容器。执行docker run 时,必须在最后指定要使用的图像名称。在这种情况下,根据您显示的docker build 命令,您的图像具有名称image1:1.0
  • 这就是我打开 mongo shell docker exec -it 5ddb8e735761 bash 的方式?其中 5ddb8e735761 是 docker 容器 ID
  • 当然我会发布一个不同的问题。感谢您的帮助。
猜你喜欢
  • 2017-08-12
  • 2014-09-24
  • 1970-01-01
  • 2022-07-08
  • 1970-01-01
  • 1970-01-01
  • 2019-09-16
  • 2022-01-25
相关资源
最近更新 更多