source

도커를 통한 MongoDB 인증 활성화 방법

itover 2023. 3. 8. 21:07
반응형

도커를 통한 MongoDB 인증 활성화 방법

도킹 스테이션의 스핀 업을 하고 싶다.mongodb:latest, 의 db에의 「」의 「DB」를 유효하게 합니다).--auth에 접속해서는 안 몽고답하다!도킹 스테이션의 시작의 일부로서 어떻게 하면 좋을까요?

★★★★★★★★★★★★★★★★★★★★★」data directory를 사용해 됩니다.-v /my/own/datadir:/data/db.

예를 들어 다음과 같습니다.

두 요.docker-entrypoint.sh:

  • MONO_INITDB_ROOT_USERNAME
  • MONO_INITDB_ROOT_PASSWORD

루트 사용자를 설정하는 데 사용할 수 있습니다.를 들어, '아까', '아까', '아까보다'를 사용할 수 .docker-compose.yml 삭제:

mongo-container:
  image: mongo:3.4.2
  environment:
      # provide your credentials here
      - MONGO_INITDB_ROOT_USERNAME=root
      - MONGO_INITDB_ROOT_PASSWORD=rootPassXXX
  ports:
    - "27017:27017"
  volumes:
      # if you wish to setup additional user accounts specific per DB or with different roles you can use following entry point
    - "$PWD/mongo-entrypoint/:/docker-entrypoint-initdb.d/"
  # no --auth is needed here as presence of username and password add this option automatically
  command: mongod

를 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★docker-compose up이치노

...
I CONTROL  [initandlisten] options: { net: { bindIp: "127.0.0.1" }, processManagement: { fork: true }, security: { authorization: "enabled" }, systemLog: { destination: "file", path: "/proc/1/fd/1" } }
...
I ACCESS   [conn1] note: no users configured in admin.system.users, allowing localhost access
...
Successfully added user: {
    "user" : "root",
    "roles" : [
        {
            "role" : "root",
            "db" : "admin"
        }
    ]
}

포인트 루트에 있기 에 $ 아래에를합니다.Excectible DIR-Point ( $PWD/MONGO)docker-compose( ( ) :

#!/usr/bin/env bash
echo "Creating mongo users..."
mongo admin --host localhost -u USER_PREVIOUSLY_DEFINED -p PASS_YOU_PREVIOUSLY_DEFINED --eval "db.createUser({user: 'ANOTHER_USER', pwd: 'PASS', roles: [{role: 'readWrite', db: 'xxx'}]}); db.createUser({user: 'admin', pwd: 'PASS', roles: [{role: 'userAdminAnyDatabase', db: 'admin'}]});"
echo "Mongo users created."

진입점 스크립트가 실행되고 추가 사용자가 생성됩니다.

a. 환경변수는 단말기를 통해 사용할 수 있습니다.

$ docker run -d --name container_name \
      -e MONGO_INITDB_ROOT_USERNAME=admin \
      -e MONGO_INITDB_ROOT_PASSWORD=password \
      mongo

모든 기능이 작동하는지 테스트하는 경우:

// ssh into the running container
// Change container name if necessary
$ docker exec -it mongo /bin/bash

// Enter into mongo shell
$ mongo

// Caret will change when you enter successfully
// Switch to admin database
$> use admin
$> db.auth("admin", passwordPrompt())

// Show available databases
$> show dbs

처음 실행할 때 데이터베이스를 인스턴스화하려면 옵션 b를 선택하십시오.

b. 버전 3.4~4.1의 경우 도커 스택 전개 파일 또는 컴파일 환경변수를 사용할 수 있습니다.

공식 mongo 이미지 세트의 빠른 참조 섹션에 설명되어 있듯이MONGO_INITDB_ROOT_USERNAME ★★★★★★★★★★★★★★★★★」MONGO_INITDB_ROOT_PASSWORD aml 파일:

mongo:
    image: mongo
    environment:
      MONGO_INITDB_ROOT_USERNAME: admin
      MONGO_INITDB_ROOT_PASSWORD: password

도커 진입점mongo 이미지의 sh 파일은 이 두 변수와 세트의 존재를 확인합니다.--auth그에 따라 플래그를 설정합니다.

c. 도커 비밀도 사용할 수 있습니다.

MONGO_INITDB_ROOT_USERNAME ★★★★★★★★★★★★★★★★★」MONGO_INITDB_ROOT_PASSWORD는 도커 엔트리 포인트에서.sh에 의해 됩니다.쉬쉬쉬다MONGO_INITDB_ROOT_USERNAME_FILE ★★★★★★★★★★★★★★★★★」MONGO_INITDB_ROOT_PASSWORD_FILE★★★★

mongo:
    image: mongo
    environment:
        - MONGO_INITDB_ROOT_USERNAME_FILE=/run/secrets/db_root_username
        - MONGO_INITDB_ROOT_PASSWORD_FILE=/run/secrets/db_root_password
    secrets:
      - db_root_username
      - db_root_password

sh」는 sh를 변환합니다.MONGO_INITDB_ROOT_USERNAME_FILE ★★★★★★★★★★★★★★★★★」MONGO_INITDB_ROOT_PASSWORD_FILE로로 합니다.MONGO_INITDB_ROOT_USERNAME ★★★★★★★★★★★★★★★★★」MONGO_INITDB_ROOT_PASSWORD

하시면 됩니다.MONGO_INITDB_ROOT_USERNAME ★★★★★★★★★★★★★★★★★」MONGO_INITDB_ROOT_PASSWORD 안에서.sh ★★★★★★★★★★★★★★★★★」.js, 「」의docker-entrypoint-initdb.d데이터베이스 인스턴스를 초기화하는 동안 폴더를 생성했습니다.

되면 확장자 됩니다..sh ★★★★★★★★★★★★★★★★★」.js에서 볼 수 것/docker-entrypoint-initdb.d파일은 알파벳 순으로 실행됩니다. .js은 mongo에서 에 의해 됩니다.MONGO_INITDB_DATABASE변수(존재하는 경우) 또는 테스트(존재하지 않는 경우)를 지정합니다.합니다..js★★★★★★ 。

이 마지막 메서드는 참조 문서에 없으므로 업데이트 후에도 유지되지 않을 수 있습니다.

내가 하려고 할 때 힘들어.

  • admin 이외의 db 생성
  • 위 DB에 새 사용자 추가 및 인증 활성화

그래서 2021년 답변을 했습니다.

내 디렉토리는 다음과 같습니다.

├── docker-compose.yml
└── mongo-entrypoint
    └── entrypoint.js

★★★docker-compose.yml 모양입니다.

version: '3.4'
services:
  mongo-container:
    # If you need to connect to your db from outside this container 
    network_mode: host
    image: mongo:4.2
    environment:
        - MONGO_INITDB_ROOT_USERNAME=admin
        - MONGO_INITDB_ROOT_PASSWORD=pass
    ports:
      - "27017:27017"
    volumes:
      - "$PWD/mongo-entrypoint/:/docker-entrypoint-initdb.d/"
    command: mongod

★★★★★★★★★★★★★를 변경해 주세요.admin ★★★★★★★★★★★★★★★★★」pass요하필

mongo-entrypoint 있다, 있다entrypoint.js다음과 같이 합니다.

var db = connect("mongodb://admin:pass@localhost:27017/admin");

db = db.getSiblingDB('new_db'); // we can not use "use" statement here to switch db

db.createUser(
    {
        user: "user",
        pwd: "pass",
        roles: [ { role: "readWrite", db: "new_db"} ],
        passwordDigestor: "server",
    }
)

서도 바꿀 요.admin:pass합니다.docker-compose.yml★★★★★★★★★★★★★★★★★★★★★★★★★★에, 여러분은 .new_db,user,pass필요한 새 데이터베이스 이름 및 인증 정보로 이동합니다.

이것으로, 이하를 실현할 수 있습니다.

docker-compose up -d

cli는 이미 하여 db.mongo cli를 사용할 수 .설치를 하거나 위의 컨테이너에 실행해서 사용할 수 있습니다.mongo★★★★★★★★★★★★★★★★★★:

mongo new_db -u user -p pass

또는 다른 컴퓨터에서 연결할 수 있습니다.

mongo host:27017/new_db -u user -p pass

내 git 저장소: https://github.com/sexydevops/docker-compose-mongo

누군가에게 도움이 되길 바랍니다.저는 오늘 오후를 잃었습니다;)

나은추가 :
https://blog.madisonhub.org/setting-up-a-mongodb-server-with-auth-on-docker/httpsblog.madisonhub.org//https://docs.mongodb.com/v2.6/tutorial/add-user-administrator/httpsdocs.mongodb.com/v2.6/tutorial//

같은 문제에 대해 제가 한 일은 이렇습니다. 그리고 효과가 있었습니다.

  1. 서버에서 mongo 도커 인스턴스를 실행합니다.

    docker run -d -p 27017:27017 -v ~/dataMongo:/data/db mongo
    
  2. 실행 중인 도커 인스턴스에서 bash를 엽니다.

    docker ps
    

    컨테이너 IDIMAGE 명령 생성 상태 포트 이름

    b07599e429fb mongo "도커 진입점.." 35분 전 Up 35분 0.0.0:27017-> 27017/tcp musing_stallman

    docker exec -it b07599e429fb bash
    root@b07599e429fb:/#
    

    레퍼런스 - https://github.com/arunoda/meteor-up-legacy/wiki/Accessing-the-running-Mongodb-docker-container-from-command-line-on-EC2

  3. mongo 라고 입력하고 mongo 쉘로 들어갑니다.

    root@b07599e429fb:/# mongo
    
  4. 이 예에서는 이안이라는 이름의 사용자를 설정하고 해당 사용자에게 cool_db 데이터베이스에 대한 읽기 및 쓰기 액세스 권한을 부여합니다.

    > use cool_db
    
    > db.createUser({
        user: 'ian',
        pwd: 'secretPassword',
        roles: [{ role: 'readWrite', db:'cool_db'}]
    })
    

    참고 자료: https://ianlondon.github.io/blog/mongodb-auth/ (첫 번째 포인트만)

  5. mongod 쉘에서 나와 bash합니다.

  6. 다음 명령을 사용하여 도커 인스턴스를 중지합니다.

    docker stop mongo
    
  7. auth를 유효하게 하고, mongo 도커를 실행합니다.

    docker run -d -p 27017:27017 -v ~/dataMongo:/data/db mongo mongod --auth
    

    레퍼런스:도커를 통해 MongoDB 인증을 활성화하는 방법(이 질문에 대한 사용자 Ismail의 답변)

  8. 다음 명령을 사용하여 로컬 Windows 노트북에서 Google Cloud 서버에서 실행 중인 인스턴스에 연결할 수 있습니다.

    mongo <ip>:27017/cool_db -u ian -p secretPassword
    

    참조: Mac OS 터미널에서 원격 Mongo 서버에 연결하는 방법

여기에는 .js 파일을 진입점 초기화 폴더에 놓는 것만으로 충분합니다.

예를 들어 진입점.접속점 등입니다.

var db = connect("mongodb://localhost/admin");

db.createUser(
    {
        user: "yourAdminUserName",
        pwd: "yourAdminPassword",
        roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
    }
)

docker-timeout.yml:

db:
  image: mongo:3.2
  volumes:
   - /my/own/datadir:/data/db
   - ../mongo-entrypoint:/docker-entrypoint-initdb.d

나머지는 수작업으로 하거나 같은 작업을 더 많이 한다.

필요에 따라서, .sh 파일을 init 폴더에 드롭 해 파일을 정리할 수도 있습니다.zz-cleanup.sh

공식 몽고 이미지의 도커 파일은 여기 있습니다.기본 명령어는 mongod이지만 사용자가 이미 설정되어 있다고 가정하여 --auth 스위치를 추가하도록 덮어쓸 수 있습니다.

docker run -d .... mongodb:latest mongod --auth

사용자를 생성해야 하는 경우 시작 스크립트를 에 볼륨 마운트해야 합니다./entrypoint.sh기본 스타트업 스크립트를 대체하고 해당 스크립트에 사용자를 생성하여 인증 스위치로 mongo를 시작합니다.

docker run -d .... -v $PWD/my_custom_script.sh:/entrypoint.sh mongodb:latest

코멘트를 하고 싶지만 평판이 좋지 않습니다.

위에 표시된 사용자 추가 실행 가능 스크립트는 --authenticationDatabase admin 및 NEWDATABASNAME을 사용하여 수정해야 합니다.

mongo --authenticationDatabase admin --host localhost -u USER_PREVIOUSLY_DEFINED -p PASS_YOU_PREVIOUSLY_DEFINED NEWDATABASENAME --eval "db.createUser({user: 'NEWUSERNAME', pwd: 'PASSWORD', roles: [{role: 'readWrite', db: 'NEWDATABASENAME'}]});"

https://i.stack.imgur.com/MdyXo.png

@jbochniak:감사합니다.처음에는 이미 이 모든 것을 발견했다고 생각했지만, 당신의 예(특히 Mongo Docker 이미지 버전)가 도움이 되었습니다.

해당 버전(v3.4.2) 및 v3.4(현재 v3.4.3에 대응)는 v3.5(적어도 태그 '3' 및 '최신')에서도 이러한 변수를 통해 지정된 'MONGO_INITDB_ROOT'를 지원하며 사용자의 답변과 문서에서 설명된 대로 작동하지 않습니다.

GitHub의 코드를 바로 봤는데, 이 변수들의 유사한 용도를 보고 버그를 바로 찾을 수 없었습니다. 버그로 제출하기 전에 그렇게 해야 합니다.

다음 이미지를 사용하여 수정합니다.

docker-compose.yml 포함

services:
  db:
    image: aashreys/mongo-auth:latest
    environment:
      - AUTH=yes
      - MONGODB_ADMIN_USER=admin
      - MONGODB_ADMIN_PASS=admin123
      - MONGODB_APPLICATION_DATABASE=sample
      - MONGODB_APPLICATION_USER=aashrey
      - MONGODB_APPLICATION_PASS=admin123
    ports:
      - "27017:27017"
     // more configuration

env 변수를 사용하여 mongo 사용자 이름과 비밀번호를 설정할 수 있습니다.

MONGO_INITDB_ROOT_USERNAME
MONGO_INITDB_ROOT_PASSWORD

단순한 도커 명령어 사용

docker run -e MONGO_INITDB_ROOT_USERNAME=my-user MONGO_INITDB_ROOT_PASSWORD=my-password mongo

도킹 스테이션 사용

version: '3.1'

services:

  mongo:
    image: mongo
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: my-user
      MONGO_INITDB_ROOT_PASSWORD: my-password

그리고 마지막 옵션은 수동으로 컨테이너에 접근하여 mongo docker 컨테이너 안에서 사용자와 비밀번호를 설정하는 것입니다.

docker exec -it mongo-container bash

이제 mongo shell 명령어를 사용하여 원하는 모든 것을 설정할 수 있습니다.

저는 좋아요.

DB 이름으로 컨테이너 생성

docker run -d \
--name mongodb \
-e MONGO_INITDB_DATABASE=trackdb \
-p 27017:27017 \
mongo

컨테이너로 이동하여 사용자 생성

docker exec -it mongodb bash
mongo
use trackdb
db.createUser({user: "user", pwd: "secretPassword",roles: [{ role: 'readWrite', db:'trackdb'}]})
exit
exit

컨테이너 중지:

docker stop mongodb

다음을 통해 컨테이너 ID 확인:

docker ps -a

도커 구성 변경(마음에 드는 에디터 사용)

sudo nano /var/lib/docker/containers/<YOUR_CONTAINER_ID>/config.v2.json

두 자리를 찾고 두 번째 인수를 추가합니다.

"Args":["mongod"],-->"Args":["mongod","--auth"],

"Cmd":["mongod"],-->"Cmd":["mongod","--auth"],

만, 는 도커 서비스를 재기동했습니다.sudo reboot now.

할 수 .docker inspect mongodb두 번째 인수는 두 곳에서 찾을 수 있습니다.컨테이너를 시작하고 인증을 확인합니다.

맛있게 드세요!

mongodb용 컨테이너와 api 서비스용 컨테이너가 2개 있다고 가정합니다.mongo 컨테이너를 시작할 때 사용자 이름과 비밀번호 외에 Mongo_INITDB_DATABASE도 추가해야 합니다.

version: '3.4'

services:   

    mymongo:
        container_name: mymongo
        environment:
          - MONGO_INITDB_DATABASE=admin // This is important
          - MONGO_INITDB_ROOT_USERNAME=root
          - MONGO_INITDB_ROOT_PASSWORD=YOURPASSWORD
        restart: unless-stopped
        ports:
           - "27017:27017"
        volumes:
           - mongo-database:/data/db     
    
    post.api:
        container_name: post.api
        environment:
          - ASPNETCORE_ENVIRONMENT=Development
          - DatabaseSettings__ConnectionString=mongodb://root:YOURPASSWORD@mymongodb:27017
        ports:
          - "5010:80" 

volumes:
  mongo-database:
    external: false

api의 api)에서 post.api를 합니다.에서ApplicationContext.cs예요: 이런 거예요.

public ApplicationContext(IDatabaseSettings settings)
        {
            _settings = settings ?? throw new ArgumentNullException(nameof(settings));

            MongoClient client = new(settings.ConnectionString);            
            IMongoDatabase database = client.GetDatabase(settings.DatabaseName);    
        }

언급URL : https://stackoverflow.com/questions/34559557/how-to-enable-authentication-on-mongodb-through-docker

반응형