簡體   English   中英

如何使用身份驗證制作mongo docker容器

[英]how to make a mongo docker container with auth

我無法通過遠程甚至docker exec -it container bash連接它。 我的腳本怎么了?

日志中似乎已經成功添加了用戶,但是為什么最后退出呢?

我的bash代碼一定有問題,那么這里有什么問題?

Docker版本1.13.1,內部版本092cba3

docker文件

FROM ubuntu:16.04
MAINTAINER TonyWang <plantpark.net@gmail.com>
RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
RUN echo "deb http://repo.mongodb.org/apt/ubuntu $(cat /etc/lsb-release | grep DISTRIB_CODENAME | cut -d= -f2)/mongodb-org/3.2 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-3.2.list
RUN apt-get update && apt-get install -y mongodb-org
RUN mkdir -p /data/db

ADD set_mongodb_password.sh /set_mongodb_password.sh

EXPOSE 27017 28017
CMD ["/set_mongodb_password.sh"]

set_mongodb_password.sh

#!/bin/bash
set -m
/usr/bin/mongod
sleep 5
mongo admin --eval "help" >/dev/null 2>&1

mongodb_cmd="mongod --storageEngine wiredTiger"
cmd="$mongodb_cmd --httpinterface --rest --master"
cmd="$cmd --auth"
$cmd &

sleep 2

mongo admin --eval "db.createUser({user: 'rootUser', pwd: 'rootPass', roles:[{role:'root',db:'admin'}]});"
mongo admin -u rootUser -p rootPass << EOF
use admin
db.createUser({user: 'testuser', pwd: 'testpass', roles:[{role:'dbOwner',db:'Mongotest'}]})
EOF

docker日志容器

MongoDB shell version: 3.2.12
connecting to: admin
2017-03-19T13:52:52.591+0000 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:45052 #1 (1 connection now open)
2017-03-19T13:52:52.591+0000 I ACCESS   [conn1] note: no users configured in admin.system.users, allowing localhost access
Successfully added user: {
    "user" : "rootUser",
    "roles" : [
        {
            "role" : "root",
            "db" : "admin"
        }
    ]
}
2017-03-19T13:52:52.617+0000 I NETWORK  [conn1] end connection 127.0.0.1:45052 (0 connections now open)
MongoDB shell version: 3.2.12
connecting to: admin
2017-03-19T13:52:52.650+0000 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:45054 #2 (1 connection now open)
2017-03-19T13:52:52.663+0000 I ACCESS   [conn2] Successfully authenticated as principal rootUser on admin
switched to db admin
Successfully added user: {
    "user" : "testuser",
    "roles" : [
        {
            "role" : "dbOwner",
            "db" : "Mongotest"
        }
    ]
}
bye
2017-03-19T13:52:52.677+0000 I NETWORK  [conn2] end connection 127.0.0.1:45054 (0 connections now open)

docker容器退出是因為它已完成運行您已告訴其運行的命令set_mongodb_password.sh

但是,我不建議您嘗試解決此問題。 我認為將種子例程內置到服務器容器中的設計是一個壞主意,而是建議將種子例程分開。 由於多種原因:

  1. 您將承諾在每個系統(開發,測試,生產)上使用相同的用戶名和密碼,這是不安全的做法。
  2. 您將用戶名和密碼存儲在docker映像中,即應用程序中; 同樣,這是一個安全漏洞。
  3. 您要使數據庫系統每次啟動容器時都運行種子例程,這是一個壞主意:這應該是一次僅做的工作,與單個容器和服務器的運行方式和運行時間無關。

查看有關使用單獨容器進行mongo播種問題和答案 ,並且還對docker機密進行一些研究,可能會很有用。

Setp.1 createUser.js保存到/ initMongo目錄

db = db.getSiblingDB('mydb');
db.createUser({
    user: "myUser" , 
    pwd: "sa123456", 
    roles: [  
        { role:"dbOwner", db: "mydb" }
    ]
});

第二步docker-compose.yml

version: '2'
services:
  mongodb:
    container_name: mongodb
    image: mongo:3.4
    ports:
      - 27017:27017
    volumes: 
      - /initMongo:/docker-entrypoint-initdb.d/
    environment: 
      - MONGO_INITDB_ROOT_USERNAME=admin
      - MONGO_INITDB_ROOT_PASSWORD=admin123456

MongoURL

mongodb://myUser:sa123456@mongodb:27017/mydb

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM