2015-10-11 7 views
1

У меня есть DOCKER изображение, сконфигурированный с node.js (с экспресс) и MongoDB. Запуск службы mongod в фоновом режиме: mongod --fork --logpath /var/lib/mongodb.log. Я запускаю приложение node.js: npm start, что приводит к интерактивной оболочке (показывает запросы на сервер).Как запустить Node.js и MongoDB интерактивную оболочку одновременно внутри контейнера Докер

Но если я хочу отслеживать изменения БД, выполняемые моим приложением node.js, каждый раз, когда я вынужден остановить сервер узла (ctrl + c) и запускает интерактивную оболочку mongoDB, используя: mongo.

Итак, в следующий раз, если я хочу запустить приложение node.js, мне пришлось остановить интерактивную оболочку mongoDB (ctrl + c) и запустить сервер снова и снова.

Есть ли способ запускать как node.js interactive shell, так и mongoDB interactive shell одновременно, может быть в двух разных терминальных окнах в Docker?

На изображении ниже показан снимок моего терминала. enter image description here

Я использую Ubuntu 15.04 и Docker версия 1.5.0, построить a8a31ef

ответ

1

Я бы порекомендовал вам попробовать установки tmux. Вы можете добавить следующие строки в Dockerfile сделать tmux доступны в контейнере:

RUN apt-get update && apt-get install -y tmux 

tmux обеспечит вас с экраном, который может представлять собой несколько окон с несколькими панелями, обработку ввода/вывода для вас.

В качестве альтернативы, вы можете использовать CTRL+Z, fg, bg, чтобы изменить процесс вашего просмотра в foreground. Окончательным решением может быть запуск docker exec в двух отдельных терминалах.

Наконец, точно не связанные с вашим вопросом, вы можете выставить порт для mongod на хост и подключиться к нему через ваш местный mongo CLI клиента или клиента GUI, такого как Robomongo.

+0

«docker exec» - это тот, который я искал. –

+0

Но если бы мы могли достичь идеи @dnephin о запуске каждой службы в отдельных контейнерах и их объединении, это было бы лучшим и рекомендуемым решением (см. Мой комментарий для ответа dnephin). –

2

Я предлагаю не запускать эти службы в одном контейнере. Запустите каждый в отдельном контейнере и используйте docker-compose для управления строительством и запуском контейнеров.

docker-compose logs покажет вам результаты каждого обслуживания.

Управление службами в отдельных контейнерах позволит вам изменять каждый отдельно и дает вам среду, которая ближе к производственной настройке.

+0

Моя первоначальная идея заключалась в том, чтобы запускать каждую службу в отдельном контейнере. Но не удалось связать контейнеры друг с другом. Приложение моего узла, работающее в CONTAINER1, не смогло общаться с mongoDb, запущенным в CONTAINER2. Не могли бы вы предложить способ достичь этого? –

+0

Это рекомендуемый подход. Если вы заинтересованы, ищите вопросы, связанные с «docker-compose» и запуская несколько контейнеров в унисон. Если вы все еще не можете найти ответ, рассмотрите вопрос о повторной формулировке вопроса или открытии нового –

+0

Да, если вы Google что-то вроде «docker-compose node mongo», вы должны найти кучу примеров – dnephin