Tôi có một container Mongo được tạo ra trong Soạn:Docker-soạn tạo chứa Mongo với username và password
version: '2'
volumes:
mongodata:
driver: local
services:
mongo:
image: mongo:latest
hostname: ${MONGODB_HOST}
restart: always
ports:
- "27017:27017"
volumes:
- mongodata:/data/db
này hoạt động hoàn hảo, tuy nhiên bây giờ tôi muốn đặt một mật khẩu trên cơ sở dữ liệu. Để làm như vậy, trước tiên là tôi hiểu nó tôi cần phải tạo cơ sở dữ liệu, thêm mật khẩu, sau đó khởi động lại nó với cờ --auth
. Câu hỏi của tôi là làm thế nào để làm quá trình này với docker-compose.
Tôi có thể làm điều này nếu tôi làm mọi thứ mà không có trình tạo docker. Các vấn đề mà tôi có thể thấy phát sinh khi soạn thư là:
a) docker-compose hoạt động bên trong mạng docker. b) docker-compose không thể chạy các lệnh khác nhau ngay từ đầu như trong quá trình sản xuất. - điều này quan trọng bởi vì mặc dù một số người nói rằng bạn có thể chạy --auth
ngay từ đầu và nó sẽ cho phép bạn đặt mật khẩu lần đầu tiên, điều này dường như không phải như vậy.
Một giải pháp tôi đã bắt đầu làm việc trên là một kịch bản shell tôi sẽ chạy trên tất cả các máy chủ của tôi trước khi chạy tập tin Docker-soạn:
# start the temporary container
docker run -d -v /tmp/mongodb --name tmpdb -e MONGODB_DBNAME=db_test mongo --auth
# do the user creation
docker run -it --link tmpdb --rm mongo sh -c 'mongo --host tmpdb --eval "db.createUser({ user: \"admin\", pwd: \"password\", roles: [ { role: \"root\", db: \"admin\" } ] });"'
# stop the server
docker stop tmpdb
# create new mongodb container, using the old ones data
docker run -d -p 27017:27017 --name mongo2 -e MONGODB_DBNAME=db_test mongo --auth
# clean up old container (we are using the volumes so they will stick around)
docker rm tmpdb
Tập tin này sẽ tạo ra một container tạm thời, đặt ra một tên người dùng/mật khẩu trên nó, dừng vùng chứa ban đầu, tạo vùng chứa mới bằng cách sử dụng vùng chứa cũ và xóa vùng chứa ban đầu. Vùng chứa mongo mới hiện có mật khẩu.
Vì vậy, câu hỏi kết luận của tôi là, cách tốt nhất để làm điều này trong docker-compose là gì?
container khác của tôi trong tập tin Docker-soạn của tôi cần để có thể truy cập vào Mongo vì vậy tôi nghĩ container khối lượng giữ dữ liệu Mongo cần phải được trong cùng một mạng rằng Docker-soạn tạo