如何使用auth制作一个mongo docker容器

时间:2017-03-19 14:05:19

标签: bash mongodb

我无法通过远程甚至是docker exec -it容器bash连接它。我的剧本出了什么问题?

日志似乎已经成功添加了用户,但为什么要退出呢?

我的bash代码肯定有问题,那么这里的问题是什么?

Docker版本1.13.1,构建092cba3

dockerfile

            article[ctr] = &art;
            printf("\nIn Func: %s", (*article[ctr]).artname);

            ctr++;
            writtenArticles++;

set_mongodb_password.sh

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"]

docker记录容器

#!/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

2 个答案:

答案 0 :(得分:2)

docker容器退出是因为已完成运行您已告诉它运行的命令set_mongodb_password.sh

但是,我不建议尝试解决这个问题;我认为你将种子例程内置到服务器容器中的设计是一个坏主意,而是建议将种子例程保持独立。出于多种原因:

  1. 您承诺在每个系统(开发,测试,生产)上使用相同的用户名和密码,这是一种糟糕的安全措施。
  2. 您将用户名和密码存储在泊坞窗图片中,即在应用程序中;这又是一个安全漏洞。
  3. 每次启动容器时,您都要提交数据库系统来运行种子例程,这是一个坏主意:它应该是一次性的工作,与个别容器和服务器的运行方式和时间无关。
  4. 查看question and answer about mongo seeding using a separate container并对docker secrets进行一些研究可能会有用。

答案 1 :(得分:1)

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

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

Step.2 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