我无法通过远程甚至是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
答案 0 :(得分:2)
docker容器退出是因为已完成运行您已告诉它运行的命令set_mongodb_password.sh
。
但是,我不建议尝试解决这个问题;我认为你将种子例程内置到服务器容器中的设计是一个坏主意,而是建议将种子例程保持独立。出于多种原因:
查看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