Возможные решения, которые могут подойти:
- Монтирование большого файла с использованием томов. Допустим, вы используете следующую команду для запуска док-контейнера
docker run --name mongodb mongo:latest
И большой файл находится внутри этого пути на вашем хосте /backup/mongo/largefile.json
. Чтобы смонтировать этот файл внутри контейнера, вам нужно запустить новый контейнер вместо уже запущенного, так что вы можете свободноОстановите старый контейнер перед запуском нового, используя следующие команды:
docker stop mongodb
docker rm mongodb
docker run --name mongodb -v /backup/mongo:/home/ mongo:latest
Приведенные выше команды остановят контейнер с именем mongodb
, а затем удалят его и после этого создадут новый контейнер с тем же именем.и смонтировать этот каталог /backup/mongo
в этот путь /home
внутри контейнера.Наконец, если у вас есть специальный сценарий оболочки, который будет выполнять импорт для вас после монтирования файла, вы можете добавить этот сценарий в /docker-entrypoint-initdb.d/
, и он будет выполнен после первого запуска контейнера.и теперь последняя команда будет ( Изменить команду по своему усмотрению ):
Эта команда не обеспечивает постоянство данных для /data/db
, поэтому вам нужно создатьобъем для него, используя -v
docker run --name mongodb -v /backup/mongo:/home/ -v /path/to/my/script:/docker-entrypoint-initdb.d/ mongo:latest
Чтобы убедиться, что большой файл находится внутри контейнера, вы можете использовать эту команду (при условии, что имя контейнера - mongodb):
docker exec -it mongodb bash
Подключение с локального компьютера к контейнеру на вашем VPS .Как вы упомянули в своем комментарии, вы можете использовать приложение графического интерфейса, расположенное на вашем компьютере, для выполнения импорта.В этом случае вам нужно учесть следующее:
- Начиная с Mongo 3.6, оно не будет открыто опубликовано.поэтому вы должны указать, что он должен быть открыт, используя
mongod --bind_ip 0.0.0.0
, добавленный в конец команды docker run
, но я не рекомендую следовать этому методу, поскольку он небезопасен.Или вы можете использовать SSH туннелирование, которое соединит вас с IP-адресом контейнера.
Моя последняя рекомендация - следовать первому методу, так как файл уже доступен на VPS.и нет необходимости загружать его снова.