Создайте директорию, например ~/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