Hướng dẫn mongodb create user docker-compose - mongodb tạo người dùng docker-soạn

Để khởi tạo Mongo với các tập lệnh Triple và initDB của người dùng ban đầu-DB chỉ với một docker-compose.yml, không có bất kỳ cấu hình bổ sung nào, bạn có thể sử dụng hình ảnh bitnami/Mongo.

Trong trường hợp của tôi, tôi đã không chạy các tập lệnh của mình theo thư mục /Docker-entrypoint-initdb.d trong container sau khi đặt các biến môi trường; MongoDB_username và MongoDB_Password (các biến env cụ thể cho hình ảnh bitnami) vì Mongod chạy với tùy chọn --Auth tự động khi bạn đặt các biến này. Do đó, tôi đã gặp lỗi xác thực khi container đang trong quá trình thực thi các tập lệnh./docker-entrypoint-initdb.d directory in the container after setting environment variables; MONGODB_USERNAME and MONGODB_PASSWORD (specific env variables for bitnami image) because mongod runs with --auth option automatically when you set these variables. Consequently, I got authentication errors when the container was in the process of executing the scripts.

Bởi vì, nó đã kết nối với: MongoDB: //192.168.192.2: 27017/máy nén

Nhật ký đầu cuối của lỗi

Tệp docker đầu tiên:

version: "3"
services:
mongodb:
    container_name: mongodb
    image: 'docker.io/bitnami/mongodb:4.2-debian-10'
    ports:
        - "27017:27017"
    volumes:
        - "mongodb_data:/bitnami/mongodb"
        - "./mongodb/scripts:/docker-entrypoint-initdb.d"
    environment:
        - MONGODB_INITSCRIPTS_DIR=/docker-entrypoint-initdb.d
        - MONGODB_USERNAME=some_username
        - MONGODB_PASSWORD=some_password
        - MONGODB_DATABASE=some_db_name
    networks:
        backend:
    restart: unless-stopped
volumes:
    mongodb_data:
networks:
    backend:
        driver: bridge

Tệp JS JS dưới ./mongodb/scripts đường dẫn:

let db = connect("localhost:27017/some_db_name");
db.auth("some_username", "some_password");
let collections = db.getCollectionNames();
let storeFound = false; 
let index;
for(index=0; index

Vì vậy, tôi đã quyết định thêm các biến môi trường mới vào Docker-compose.yml sau khi kiểm tra https://github.com/bitnami/bitnami-docker-mongodb/blob/master/4.2/debian-10/rootfs/opt/bitnami/ SCRIPT/LIBMONGODB.SH.

Trong tệp SH này, có chức năng như MongoDB_Custom_init_Scripts () để thực thi các tập lệnh. Để thực thi tất cả các tệp tập lệnh, nó chạy phương thức MongoDB_Execute (). Trong phương thức này, sau khi thể hiện Mongod được chạy và chạy, Mongo Client đang kết nối với thể hiện Mongod bằng cách sử dụng một số tham số.mongodb_custom_init_scripts() for executing the scripts. For executing all script files, it runs mongodb_execute() method. In this method, after mongod instance is up and run, mongo client is connecting to the mongod instance by using some parameters.

########################
# Execute an arbitrary query/queries against the running MongoDB service
# Stdin:
#   Query/queries to execute
# Arguments:
#   $1 - User to run queries
#   $2 - Password
#   $3 - Database where to run the queries
#   $4 - Host (default to result of get_mongo_hostname function)
#   $5 - Port (default $MONGODB_PORT_NUMBER)
#   $6 - Extra arguments (default $MONGODB_CLIENT_EXTRA_FLAGS)
# Returns:
#   None
########################
mongodb_execute() {
    local -r user="${1:-}"
    local -r password="${2:-}"
    local -r database="${3:-}"
    local -r host="${4:-$(get_mongo_hostname)}"
    local -r port="${5:-$MONGODB_PORT_NUMBER}"
    local -r extra_args="${6:-$MONGODB_CLIENT_EXTRA_FLAGS}"
    local result
    local final_user="$user"
    # If password is empty it means no auth, do not specify user
    [[ -z "$password" ]] && final_user=""

    local -a args=("--host" "$host" "--port" "$port")
    [[ -n "$final_user" ]] && args+=("-u" "$final_user")
    [[ -n "$password" ]] && args+=("-p" "$password")
    [[ -n "$extra_args" ]] && args+=($extra_args)
    [[ -n "$database" ]] && args+=("$database")

    "$MONGODB_BIN_DIR/mongo" "${args[@]}"
}

Sau đó, tôi đã thêm các biến môi trường mới vào docker của mình như MongoDB_Advertised_hostname, MongoDB_port_number, và, MongoDB_Client_extra_flagsMONGODB_ADVERTISED_HOSTNAME, MONGODB_PORT_NUMBER, and, MONGODB_CLIENT_EXTRA_FLAGS

Vì vậy, docker-compose.yml cuối cùng của tôi trông giống như:

version: "3"
services:
mongodb:
    container_name: mongodb
    image: 'docker.io/bitnami/mongodb:4.2-debian-10'
    ports:
        - "27017:27017"
    volumes:
        - "mongodb_data:/bitnami/mongodb"
        - "./mongodb/scripts:/docker-entrypoint-initdb.d"
    environment:
        - MONGODB_INITSCRIPTS_DIR=/docker-entrypoint-initdb.d
        - MONGODB_USERNAME=some_username
        - MONGODB_PASSWORD=some_password
        - MONGODB_DATABASE=some_db_name
        - MONGODB_ADVERTISED_HOSTNAME=localhost
        - MONGODB_PORT_NUMBER=27017
        - MONGODB_CLIENT_EXTRA_FLAGS=--authenticationDatabase=some_db_name
    networks:
        backend:
    restart: unless-stopped
volumes:
    mongodb_data:
networks:
    backend:
        driver: bridge

Bây giờ, nó đã được kết nối bởi url này:

MongoDB: // LocalHost: 27017/?