Я новичок в Docker, и я прочитал Mongo Docker Docs .Мне нужна помощь в настройке простого приложения.
Мне нужен локальный mongodb, который создает дамп / использует базу данных с именем "my_test_db" и записывает в <project-dir>/mongo/my_test_db
Вот мой простой проект:
# project structure
<project-dir>/
-- .env
-- docker-compose.yml
-- mongo/
-- + -- my_test_db/
Файл .env
:
# <project>/.env
MONGO_INITDB_ROOT_USERNAME=test_user
MONGO_INITDB_ROOT_PASSWORD=test_pwrd
MONGO_INITDB_DATABASE=my_test_db
MONGO_DATA_DIR=/mongo/my_test_db
MONGO_LOG_FILE=/mongo/mongodb.log
моя попытка docker compose
:
#docker-compose.yml
version: '3'
services:
mongodb:
image: mongo:4.0
# load env variables
env_file:
- .env
# map data_dir to host <project>/<data_dir>
volumes:
- ".${MONGO_DATA_DIR}:${MONGO_DATA_DIR}"
expose:
- 27017
# set env vars with loaded vars (appears to be necessary for the user to be created, despite loading them with env_file)
environment:
MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME}
MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_DATABASE}
MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE}
# map ports
ports:
- 27017:27017
command: "mongod --smallfiles"
container_name: mongodb-test
# --logpath=.${MONGO_LOG_FILE} # when added to command fails
тогда в двух оболочках у меня
#shell-1
<project-dir>$ docker-compose up
# I see my user created
# I see "MongoDB starting : pid=1 port=27017 dbpath=/data/db 64-bit host=e19ea190b601" so my custom db isnt made on init...
#shell-2
# <project-dir>$ mongo 27017 --usernamne test_user --password test_pwrd # does fails to connect
<project-dir>$ mongo 27017 # connects
> db.getName()
# 27017 # so naming it didnt work
> show users
# Error: command usersInfo requires authentication
> use my_test_db
> db.myColl.insert({'name': 'test'})
# WriteCommandError({..., "codeName": "Unauthorized"})
В настоящее время я тестирую на macOS (поскольку в документах указано, что это может иметь значение)
Что я делаю не так?Я понимаю концепцию докера, но лично я не использую ее, потому что привыкнуть к ней слишком сложно ... но я пытаюсь учиться.