目前正在考虑在容器中部署mongo。到目前为止我的文件看起来像,
############################################################
# Dockerfile to build Mongo Containers
# Based on Ubuntu
############################################################
# Set the base image to Ubuntu
FROM ubuntu:14.04
# File Author / Maintainer
MAINTAINER Maintaner felix001
# Create repo file
RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
RUN echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-3.0.list
# Update the default application repository sources list
RUN apt-get update && apt-get install -y \
mongodb-org \
vim
# Create the MongoDB data directory
RUN mkdir -p /data/db
# Expose port 27017 from the container to the host
EXPOSE 27017
# Set usr/bin/mongod as the dockerized entry-point application
ENTRYPOINT ["/usr/bin/mongod"]
但是我需要锁定mongo,因此您需要密码才能执行任何管理操作并创建数据库/用户。所以我的问题是2折,
保护的最佳方法是什么?到目前为止,我有,
vim /etc/mongod.conf
+ auth = true
use admin
db.createUser({ user:"admin", pwd:"secretpassword", roles: ["dbAdminAnyDatabase","clusterAdmin"]})
use example
db.createUser({ user:"user1", pwd:"abc123", roles:["readWrite"] })
将此添加到Dockerfile的最佳方法是什么?
谢谢,
答案 0 :(得分:2)
我不建议"烘焙"凭据到您的图像。您创建的每个数据库都将具有相同的密码。
有关示例,请查看tutum mongodb图像,其中容器运行脚本在启动时设置密码:
最后,我将向您介绍有关密码使用环境变量的相关问题:
答案 1 :(得分:1)
这是我如何保护我的 MongoDB docker 容器。
以下分步过程将指导您实施安全性。
一个简单的解决方案是在 docker run
命令时使用环境变量
$ docker run -d -p 27017:27017 --name mongodb -v /var/docker/mongo/data:/data/db \
-e MONGO_INITDB_ROOT_USERNAME=superuser \
-e MONGO_INITDB_ROOT_PASSWORD=Strong_Password \
mongo:4.4.2
当您尝试使用 MongoDB-Compass 等 MongoDB 客户端进行访问时,您必须提供用户名和密码才能访问数据库。
auth
选项创建 docker 容器$ docker run --name <container_name> --restart=always -d -p 27017:27017 mongo mongod --auth
$ sudo docker exec -it <container_name> bash
连接本地mongo实例
# mongo
创建第一个管理员用户
> use admin
> db.createUser({
user: 'user',
pwd: 'StrongPassword',
roles: [{ role: 'dbOwner', db:'admin'}]
})
退出mongo shell
> exit
退出容器
# exit
现在您可以使用用户名和密码进行连接。记得使用 --authenticationDatabase "admin"
mongo -u "user" -p "StrongPassword" YOURHOSTIP --authenticationDatabase "admin"
您还可以通过 MongoDB-Compass 连接到 mongo 容器。我使用以下连接字符串进行连接。如果无法连接,请仔细检查您的字符串
mongodb://user:*****@IP:27017/?authSource=admin&compressors=zlib&readPreference=primary&gssapiServiceName=mongodb&appname=MongoDB%20Compass&ssl=false
参考: https://gist.github.com/davideicardi/f2094c4c3f3e00fbd490#file-mongo-docker-bash-L23