- Đối với phần xác thực:bạn đã thử thêm
--authenticationDatabase admin
chưa để có thể đăng nhập? -
Về
MONGO_INITDB_DATABASE
nó sẽ không hiệu quả trừ khi bạn có tập lệnh dưới/docker-entrypoint-initdb.d/
như được hiển thị trong docker-entrypoiny .sh được sử dụng trong hình ảnh mongodb để bạn có thể có tập lệnh bash trongdocker-entrypoint-initdb.d/
với điều đó đã nói. -
Sử dụng người dùng root làm chủ sở hữu cho ứng dụng của bạn db không phải là một cách bảo mật khôn ngoan vì nó sẽ có khả năng kiểm soát mọi thứ trong phiên bản mongodb.
IMHO, một cách tiếp cận tốt hơn sẽ là thêm các biến phụ như sau:
-
MONGO_APPLICATION_DATABASE
-
MONGO_APPLICATION_USERNAME
-
MONGO_APPLICATION_PASSWORD
Sau đó, thêm một tập lệnh bash sẽ tạo người dùng và gán nó vào cơ sở dữ liệu bằng cách sử dụng các biến môi trường (bạn cần gắn nó vào docker-entrypoint-initdb.d):
# initmongo/setup.sh mongo admin -u $MONGO_INITDB_ROOT_USERNAME -p $MONGO_INITDB_ROOT_PASSWORD --eval "db.getSiblingDB('$MONGO_APPLICATION_DATABASE').createUser({user: '$MONGO_APPLICATION_USERNAME', pwd: '$MONGO_APPLICATION_PASSWORD', roles: [{role: 'readWrite', db: '$MONGO_APPLICATION_DATABASE'}]});"
Trong docker-compo.yml, hãy thêm một tập vào danh sách các tập hiện tại của bạn
#docker-compose.yml volumes: - ".${MONGO_DATA_DIR}:${MONGO_DATA_DIR}" - "./initmongo/:/docker-entrypoint-initdb.d/"
Và cuối cùng xóa biến này
MONGO_INITDB_DATABASE
vì không cần nóĐể đăng nhập, hãy sử dụng lệnh sau:
docker exec -it container_name mongo -u "$MONGO_APPLICATION_USERNAME" -p "$MONGO_APPLICATION_PASSWORD" --authenticationDatabase "$MONGO_APPLICATION_DATABASE" "$MONGO_APPLICATION_DATABASE"
-
-
Đối với
.env
tôi không chắc điều gì có thể gây ra sự cố này. Bạn có bất kỳ cảnh báo nào trong khi sử dụng nó không? Cũng nên cân nhắc kiểm tra nhận xét này hoặc cái này