도커를 통한 MongoDB 인증 활성화 방법
도킹 스테이션의 스핀 업을 하고 싶다.mongodb:latest, 의 db에의 「」의 「DB」를 유효하게 합니다).--auth에 접속해서는 안 몽고답하다!도킹 스테이션의 시작의 일부로서 어떻게 하면 좋을까요?
★★★★★★★★★★★★★★★★★★★★★」data directory를 사용해 됩니다.-v /my/own/datadir:/data/db.
예를 들어 다음과 같습니다.
- https://github.com/docker-library/mongo/blob/master/4.2/Dockerfile
- https://github.com/docker-library/mongo/blob/master/4.2/docker-entrypoint.sh#L303-L313
두 요.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//
같은 문제에 대해 제가 한 일은 이렇습니다. 그리고 효과가 있었습니다.
서버에서 mongo 도커 인스턴스를 실행합니다.
docker run -d -p 27017:27017 -v ~/dataMongo:/data/db mongo실행 중인 도커 인스턴스에서 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
mongo 라고 입력하고 mongo 쉘로 들어갑니다.
root@b07599e429fb:/# mongo이 예에서는 이안이라는 이름의 사용자를 설정하고 해당 사용자에게 cool_db 데이터베이스에 대한 읽기 및 쓰기 액세스 권한을 부여합니다.
> use cool_db > db.createUser({ user: 'ian', pwd: 'secretPassword', roles: [{ role: 'readWrite', db:'cool_db'}] })참고 자료: https://ianlondon.github.io/blog/mongodb-auth/ (첫 번째 포인트만)
mongod 쉘에서 나와 bash합니다.
다음 명령을 사용하여 도커 인스턴스를 중지합니다.
docker stop mongoauth를 유효하게 하고, mongo 도커를 실행합니다.
docker run -d -p 27017:27017 -v ~/dataMongo:/data/db mongo mongod --auth레퍼런스:도커를 통해 MongoDB 인증을 활성화하는 방법(이 질문에 대한 사용자 Ismail의 답변)
다음 명령을 사용하여 로컬 Windows 노트북에서 Google Cloud 서버에서 실행 중인 인스턴스에 연결할 수 있습니다.
mongo <ip>:27017/cool_db -u ian -p secretPassword
여기에는 .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
'source' 카테고리의 다른 글
| mongodb 그룹 값, 여러 필드별) (0) | 2023.03.08 |
|---|---|
| Javascript에서 PHP로 JSON 데이터를 보내시겠습니까? (0) | 2023.03.08 |
| 기본 Next.js 개발 서버를 사용하는 백엔드의 프록시 (0) | 2023.03.08 |
| 필요한 경우에만 모듈을 동적으로 주입합니다. (0) | 2023.03.08 |
| expo 앱을 로드할 수 없음: 문제가 발생했습니다. (0) | 2023.03.08 |