[MONGODB] 어떻게 도커 통해 MongoDB의에 인증을 사용하려면?
MONGODB어떻게 도커 통해 MongoDB의에 인증을 사용하려면?
나는 MongoDB를위한 스핀 업 고정 표시기를 원하는 : 최신하지만 액세스 특정 DB에 특정 사용자 (들) (들) (즉, --auth 가능) 할 수 있습니다. 어느 누구도 MongoDB를 전혀 접근하지한다! 어떻게 고정 표시기 개시의 일환으로이 작업을 수행해야합니까?
-v / 내 / 자신의 / DATADIR : / 데이터 / DB를 BTW, 데이터 디렉토리는 시작시 다음 명령을 이용하여 호스트에 앉아있다.
해결법
-
==============================
1.당신은 살펴 경우 :
당신은 살펴 경우 :
당신은 docker-entrypoint.sh에 사용되는 두 개의 변수가 있다는 것을 알 수 있습니다 :
당신은 설치 루트 사용자로 사용할 수 있습니다. 예를 들어, 당신은 다음과 같은 고정 표시기-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
고정 표시기-작성하여 컨테이너를 시작하는 지금 때 항목을 다음과 같은주의해야까지 :
... 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" } ] }
(이 엔트리 포인트에 고정 표시기-작성에 장착 될 때 $ PWD / 몽고-엔트리 포인트 디렉토리 아래에 위치) 루트 사용의 떨어져 엔트리 포인트 실행 스크립트를 사용자 정의 사용자를 추가하려면 :
#!/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."
엔트리 포인트 스크립트가 실행되고 추가 사용자가 생성됩니다.
-
==============================
2.여기에 같은 문제에 대한 한, 그것은 일 것입니다.
여기에 같은 문제에 대한 한, 그것은 일 것입니다.
-
==============================
3.에이. 당신은 단자를 통해 환경 변수를 사용할 수 있습니다 :
에이. 당신은 단자를 통해 환경 변수를 사용할 수 있습니다 :
$ 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를 선택합니다.
비. 당신은 당신의 고정 표시기 스택 배포 파일 또는 버전 4.1을 통해 3.4에 대한 작성 파일에 환경 변수를 사용할 수 있습니다.
그것은 당신의 YAML 파일의 공식 몽고 이미지 세트 MONGO_INITDB_ROOT_USERNAME 및 MONGO_INITDB_ROOT_PASSWORD의 빠른 참조 섹션에 설명 된 바와 같이 :
mongo: image: mongo environment: MONGO_INITDB_ROOT_USERNAME: admin MONGO_INITDB_ROOT_PASSWORD: password
따라서 이들 두 변수 세트 --auth 플래그의 존재 몽고 화상 수표 파일 docker-entrypoint.sh.
기음. 또한 비밀을 고정 표시기 사용할 수 있습니다.
MONGO_INITDB_ROOT_USERNAME 및 MONGO_INITDB_ROOT_PASSWORD은 MONGO_INITDB_ROOT_USERNAME_FILE 및 MONGO_INITDB_ROOT_PASSWORD_FILE 변수에서 docker-entrypoint.sh에 의해 간접적으로 설정됩니다
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
MONGO_INITDB_ROOT_USERNAME 및 MONGO_INITDB_ROOT_PASSWORD에 docker-entrypoint.sh 변환 MONGO_INITDB_ROOT_USERNAME_FILE 및 MONGO_INITDB_ROOT_PASSWORD_FILE.
데이터베이스 인스턴스를 초기화하는 동안 고정 표시기 - 엔트리 포인트-initdb.d 폴더에 또는 .sh의 .js 스크립트에서 MONGO_INITDB_ROOT_USERNAME 및 MONGO_INITDB_ROOT_PASSWORD를 사용할 수 있습니다.
컨테이너 처음 시작하면 그것은 /docker-entrypoint-initdb.d에서 발견의 .sh와의 .js 확장자를 가진 파일을 실행합니다. 파일은 알파벳 순서로 실행됩니다. 그것이 존재하거나 그렇지 않으면 테스트 경우의 .js 파일은 MONGO_INITDB_DATABASE 변수에 의해 지정된 데이터베이스를 사용 몽고에 의해 실행된다. 또한의 .js 스크립트 내에서 데이터베이스를 전환 할 수 있습니다.
이 업데이트를 생존 할 수 있도록이 마지막 방법은 참조 문서에 있지 않습니다.
-
==============================
4.공식 몽고 이미지에 대한 Dockerfile는 여기에있다. 기본 명령은 mongod되어 있지만 사용자의가 이미 구성되어 가정 --auth 스위치를 추가 할 재정의 할 수 있습니다.
공식 몽고 이미지에 대한 Dockerfile는 여기에있다. 기본 명령은 mongod되어 있지만 사용자의가 이미 구성되어 가정 --auth 스위치를 추가 할 재정의 할 수 있습니다.
docker run -d .... mongodb:latest mongod --auth
그런 다음 사용자가 작성해야하는 경우에는 기본 시작 스크립트를 교체 한 후 해당 스크립트는 사용자를 작성하고 인증 스위치와 몽고를 시작하도록 /entrypoint.sh에 시작 스크립트를 마운트 볼륨이 필요합니다.
docker run -d .... -v $PWD/my_custom_script.sh:/entrypoint.sh mongodb:latest
-
==============================
5.그냥 이것에 대한 작업 폴더 엔트리 포인트 초기화에은 .js 파일을 삭제
그냥 이것에 대한 작업 폴더 엔트리 포인트 초기화에은 .js 파일을 삭제
예를 들면 entrypoint.js
var db = connect("mongodb://localhost/admin"); db.createUser( { user: "yourAdminUserName", pwd: "yourAdminPassword", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
도커-compose.yml :
db: image: mongo:3.2 volumes: - /my/own/datadir:/data/db - ../mongo-entrypoint:/docker-entrypoint-initdb.d
손이나 같은 작품 이상으로 나머지를 수행.
그들은 주위에 누워되지 않도록 당신은 또한 파일을 정리하기 위해 초기화 폴더로의 .sh 파일을 삭제할 수 있습니다 당신이 원하는 경우 zz-cleanup.sh합니다.
-
==============================
6.@jbochniak : 처음 읽을에서 나는 이미이 모든 것을 발견했습니다 생각하지만 덕분에, 당신의 예 (. 몽고 도커 이미지의 ESP 버전) 저를 도와 밝혀졌다!
@jbochniak : 처음 읽을에서 나는 이미이 모든 것을 발견했습니다 생각하지만 덕분에, 당신의 예 (. 몽고 도커 이미지의 ESP 버전) 저를 도와 밝혀졌다!
해당 버전 (v3.4.2)와 (현재 v3.4.3에 상당) V3.4 여전히 그 변수를 통해 지정 'MONGO_INITDB_ROOT'을 지원 V3.5의 등 (적어도 태그 '3'과의 '최신') NOT DO 당신의 대답과 문서에 설명 된대로 작동합니다.
나는 빨리 GitHub의에 코드를 살펴했지만, 이러한 변수의 유사한 사용을보고 버그로를 제출하기 전에 그렇게해야, 즉시 버그를 찾을 수 없습니다 ...
-
==============================
7.내가 댓글을 달고 싶으세요하지만, 충분히 평판이 없습니다.
내가 댓글을 달고 싶으세요하지만, 충분히 평판이 없습니다.
위와 같이 사용자 추가는 실행 가능한 스크립트로 수정되어야 --authenticationDatabase 관리 및 NEWDATABASENAME.
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
-
==============================
8.수정이 이미지를 사용 :
수정이 이미지를 사용 :
고정 표시기 - 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
from https://stackoverflow.com/questions/34559557/how-to-enable-authentication-on-mongodb-through-docker by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] MongoDB를 - 값의 진수 유형에 대한 무엇? (0) | 2019.12.11 |
---|---|
[MONGODB] 문자열로 몽고에서 BinData UUID를 가져옵니다 (0) | 2019.12.11 |
[MONGODB] 몽고는 = 단일 문서의 크기를 얻을 (0) | 2019.12.11 |
[MONGODB] 마지막 n 일 이내에 모든 문서 찾기 (0) | 2019.12.11 |
[MONGODB] 시작에 어떻게 MongoDB를 컨테이너에 대한 DB를 만드는 방법? (0) | 2019.12.11 |