jOH*_*dOE 30 mongodb docker docker-compose
我正在尝试创建某种脚本,它将使用mongodb创建一个docker并自动创建一个用户.
我通常可以使用docker-compose管理我的docker图像,但这一次,我不知道该怎么做.
基本上,这是我必须做的:
docker-compose down
)--auth parameter
)db.createUser()
--auth
参数重新启动相同的容器,以允许使用在javascript中创建的用户进行登录我找不到如何用docker-compose正确地做到这一点,因为当它开始时,我必须给它命令--auth.如果我这样做,我就无法执行我的javascript来添加我的用户.如果没有用户且未提供--auth参数,MongoDB允许用户创建而无需登录.
我想自动执行此操作,我不想手动执行某些命令.目标是在每次集成测试之前创建一个可以从干净的数据库启动的脚本.
这是我的项目:
集成测试/ src目录/测试/资源/脚本/泊坞窗,compose.yml
mongodb:
container_name: mongo
image: mongo
ports:
- "27017:27017"
volumes:
- .:/setup
command: --auth
Run Code Online (Sandbox Code Playgroud)
集成测试/ src目录/测试/资源/脚本/ docker-init.sh
docker-compose down
docker-compose up -d
sleep 1
docker exec mongo bash -c "mongo myDatabase /setup/mongodb-setup.js"
Run Code Online (Sandbox Code Playgroud)
集成测试/ src目录/测试/资源/脚本/ MongoDB的-setup.js
db.createUser(
{
user: "myUser",
pwd: "myPassword",
roles: [
{ role: "readWrite", db: "myDatabase" }
]
})
Run Code Online (Sandbox Code Playgroud)
找到一种方法再次启动一个带有新参数的容器(在这种情况下--auth
)会有所帮助,但我找不到如何做到这一点(docker start不接受参数).
知道我应该怎样做我想做的事吗?
如果没有,我仍然可以使用一些Java代码或其他东西从我的数据库中删除所有内容,但我希望使用脚本创建一个完整的mongodb docker设置.
jzq*_*zqa 26
官方mongo映像现在支持以下环境变量,可以在docker-compose中使用,如下所示:
environment:
- MONGO_INITDB_ROOT_USERNAME=user
- MONGO_INITDB_ROOT_PASSWORD=password
- MONGO_INITDB_DATABASE=test
Run Code Online (Sandbox Code Playgroud)
更多解释:https: //stackoverflow.com/a/42917632/1069610
小智 15
编辑: tutumcloud存储库已弃用,不再维护,请参阅其他答案
我建议您使用环境变量来设置mongo用户,数据库和密码.tutum
(由Docker拥有)发布了非常好的形象
https://github.com/tutumcloud/mongodb
docker run -d -p 27017:27017 -p 28017:28017 -e MONGODB_USER="user" -e MONGODB_DATABASE="mydatabase" -e MONGODB_PASS="mypass" tutum/mongodb
Run Code Online (Sandbox Code Playgroud)
您可以将这些变量转换为docker-compose环境变量.您不必对其进行硬编码.
environment:
MONGODB_USER: "${db_user_env}"
MONGODB_DATABASE: "${dbname_env}"
MONGODB_PASS: "${db_pass}"
Run Code Online (Sandbox Code Playgroud)
此配置将从会话的环境变量中读取.
Gre*_*umb 14
我就是这样做的,我的要求是带上一些容器和mongodb,其他容器希望用户在他们出现时在场,这对我有用.好的部分是,mongoClientTemp在执行命令后退出,因此容器不会粘在一起.
version: '2'
services:
mongo:
image: mongo:latest
container_name: mongo
ports:
- "27017:27017"
volumes:
- /app/hdp/mongo/data:/data/db
mongoClientTemp:
image: mongo:latest
container_name: mongoClientTemp
links:
- mongo:mongo
command: mongo --host mongo --eval "db.getSiblingDB('dashboard').createUser({user:'db', pwd:'dbpass', roles:[{role:'readWrite',db:'dashboard'}]});"
depends_on:
- mongo
another-container:
image: another-image:v01
container_name: another-container
ports:
- "8080:8080"
volumes:
- ./logs:/app/logs
environment:
- MONGODB_HOST=mongo
- MONGODB_PORT=27017
links:
- mongo:mongo
depends_on:
- mongoClientTemp
Run Code Online (Sandbox Code Playgroud)
Pra*_*nav 11
在您的项目目录中创建另一个目录docker-entrypoint-initdb.d
,\n文件树如下所示:
Project-directory\n \xe2\x94\xa3 docker-entrypoint-initdb.d\n \xe2\x94\x83 \xe2\x94\x97 mongo-init.js\n \xe2\x94\x97 docker-compose.yaml\n
Run Code Online (Sandbox Code Playgroud)\ndocker-compose.yml 包含:
\nversion: "3.7"\nservices:\n mongo:\n container_name: container-mongodb\n image: mongo:latest\n restart: always\n ports:\n - 27017:27017\n\n environment:\n MONGO_INITDB_ROOT_USERNAME: root\n MONGO_INITDB_ROOT_PASSWORD: password\n MONGO_INITDB_DATABASE: root-db\n\n volumes:\n - ./docker-entrypoint-initdb.d/mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro\n
Run Code Online (Sandbox Code Playgroud)\nmongo-init.js
包含创建具有不同角色的用户的 javascript 代码。
print("Started Adding the Users.");\ndb = db.getSiblingDB("admin");\ndb.createUser({\n user: "userx",\n pwd: "1234",\n roles: [{ role: "readWrite", db: "admin" }],\n});\nprint("End Adding the User Roles.");\n
Run Code Online (Sandbox Code Playgroud)\nmongo-init.js
您可以根据需要修改。
小智 5
阅读官方mongo docker 页面后,我发现即使使用了 auth 选项,您也可以一次性创建一个管理员用户。这没有很好的记录,但它确实有效(希望这不是一个功能)。因此,您可以一直使用 auth 选项。
我创建了一个github存储库,其中包含包含要使用的命令的脚本。要运行的最重要的命令行是:
docker exec db_mongodb mongo admin /setup/create-admin.js
docker exec db_mongodb mongo admin /setup/create-user.js -u admin -p admin --authenticationDatabase admin
Run Code Online (Sandbox Code Playgroud)
第一行将创建管理员用户(即使使用 auth 选项,mongo 也不会抱怨)。第二行将使用第一行的管理员权限创建“普通”用户。
归档时间: |
|
查看次数: |
44291 次 |
最近记录: |