Создайте директорию, например ~/mongo и файл mongo-test.yml в этой папке
$ pwd
/home/agis/mongo
$ cat mongo-test.yml
version: '2.4'
services:
mongo-db-test:
image: "mongo:4.4"
container_name: mongo-db-test
volumes:
- ./mongo-db-test/db:/data/db
ports:
- "9000:27017"
restart: on-failure
cpus: 1
mem_limit: 1gb
healthcheck:
test: echo 'db.stats().ok' | mongo localhost:27017/just4testNur --quiet
interval: 5s
timeout: 5s
retries: 12
networks:
default:
external:
name: agis-net
Запустить контейнер
$ docker-compose -f mongo-test.yml up -d
Creating mongo-db-test ... done
$ docker-compose -f mongo-test.yml ps -a
Name Command State Ports
------------------------------------------------------------------------------------
mongo-db-test docker-entrypoint.sh mongod Up (healthy) 0.0.0.0:9000->27017/tcp
Остановить контейнер
$ docker stop mongo-db-test mongo-db-test
Удалить контейнер
$ docker-compose -f mongo-test.yml down -v Stopping mongo-db-test ... done Removing mongo-db-test ... done
Перезапустить контейнер
$ docker restart mongo-db-test mongo-db-test $ docker-compose -f mongo-test.yml restart Restarting mongo-db-test ... done
Добавление в контейнер mongodb аутентификацию
admin-test-db – будет пользователем с правами администратора, роль userAdminAnyDatabase для базы данных admin. Это позволит пользователю с правами администратора создавать и изменять новых пользователей и роли. Поскольку у пользователя с правами администратора есть эта роль в базе данных admin, это также предоставит ему доступ с правами суперпользователя ко всему кластеру.
$ docker exec -it mongo-db-test mongo
> use admin
switched to db admin
> db.createUser(
... {
... user: "admin-test-db",
... pwd: passwordPrompt(),
... roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
... }
... )
Enter password:
Successfully added user: {
"user" : "admin-test-db",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
},
"readWriteAnyDatabase"
]
}
Обновите файл mongo-test.yml
Добавим: command: [–auth]
$ cat mongo-test.yml
version: '2.4'
services:
mongo-db-test:
image: "mongo:4.4"
container_name: mongo-db-test
command: [--auth]
volumes:
- ./mongo-db-test/db:/data/db
ports:
- "9000:27017"
restart: on-failure
cpus: 1
mem_limit: 1gb
healthcheck:
test: echo 'db.stats().ok' | mongo localhost:27017/just4testNur --quiet
interval: 5s
timeout: 5s
retries: 12
networks:
default:
external:
name: agis-net
И проверим
$ docker exec -it mongo-db-test mongo -u admin-test-db -p --authenticationDatabase admin
MongoDB shell version v4.4.3
Enter password:
connecting to: mongodb://127.0.0.1:27017/?authSource=admin&compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("48bdb8e0-54f3-448f-9251-10c805862d20") }
MongoDB server version: 4.4.3
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
zander 0.609GB
> exit
bye
Если зайдем без аунтефиуации, то ничего не увидим
$ docker exec -it mongo-db-test mongo
MongoDB shell version v4.4.3
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("935179c1-dc45-4731-81b8-0ccf39c602a6") }
MongoDB server version: 4.4.3
> show dbs
> exit
bye