2016-11-16 4 views
1

SO ...Как-запустить Node.js экземпляр Docker сбросив в оболочку, которая автоматически хвостовых журналы

Я пытаюсь создать элегантный Docker установки/узла для моей команды на проект с нуля прототипа , Моя команда должны иметь Узел/НМП и Docker CLI установлен заранее, но после этого я буду использовать НПМ управлять всем и ранее было ...

"scripts": { 
    "docker": "npm run docker-build && npm run docker-start", 
    "docker-build": "docker build -t docker_foo .", 
    "docker-start": "docker run -it -p 8080:8080 --rm docker_foo", 
    "start": "node server.js" 
} 

... и Dockerfile содержит CMD ...

# Other stuff... 

EXPOSE 8080 

CMD ["npm", "start"] 

... который в конечном итоге запустит сервер узлов. Это хорошо работает для просмотра журналов и очистки контейнеров, но я хочу сделать это лучше. Я хотел бы вместо этого запустить контейнер в фоновом режиме с помощью опции -d и вместо этого присоединить к контейнеру исходную команду, которая заканчивает журналы, чтобы имитировать одно и то же поведение, за исключением того, что когда пользователь завершает процесс, они все еще находятся в контейнере, поэтому они могут оценить текущее состояние контейнера. Это привело меня иметь ...

"scripts": { 
    "docker": "npm run docker-build && npm run docker-start && npm run docker-attach", 
    "docker-build": "docker build -t docker_foo .", 
    "docker-start": "docker run -d -p 8080:8080 --name docker_foo docker_foo", 
    "docker-attach": "docker exec -it docker_foo /bin/ash", 
    "docker-clean": "npm run docker-clean-containers && npm run docker-clean-images", 
    "docker-clean-containers": "docker ps -a -q | xargs docker rm -f -v", 
    "docker-clean-images": "docker images -f 'dangling=true' -q | xargs docker rmi", 
    "start": "node server.js" 
} 

... но у меня возникли некоторые проблемы с поиском, где логи сервера узла хранятся либо на контейнере или на моем локальном узле, чтобы включить этот желаемый рабочий процесс. Есть ли способ перенаправить STD out и err в место в контейнере для исторических целей и способ расширения моей команды attach выше, чтобы изначально перекрыть эти журналы?

+0

Вы считаете использование 'docker logs docker_foo'? –

+0

Правда, это сработало бы ... особенно '' 'docker logs -f docker_foo''', чтобы вы могли заворачивать журналы с главной машины, но, как ни странно, я не могу найти файл журнала. Запуск следующей ... '' 'докер осматривайте --format = '{{. LogPath}}' docker_foo''' дает путь (/var/lib/docker/containers/d6797a784663ff7b8f3626e78ee4db5b6c7f6b2c1521d37a012c45664f8f0d7d/d6797a784663ff7b8f3626e78ee4db5b6c7f6b2c1521d37a012c45664f8f0d7d-json.log), что Безразлично В моем контейнере и в моей локальной коробке не существует. – Lane

ответ

0

То, что я в конечном итоге делает это просто запуск сервера узла в фоновом режиме ...

"scripts": { 
    "prebuild": "npm run clean", 
    "build": "docker build -t docker_foo .", 
    "clean": "npm run clean:containers && npm run clean:images && npm run clean:volumes", 
    "clean:containers": "docker ps -a -q | xargs docker rm -f -v", 
    "clean:images": "docker images -f 'dangling=true' -q | xargs docker rmi", 
    "clean:volumes": "docker volume ls -qf dangling=true | xargs docker volume rm", 
    "prerun": "npm run build",   
    "run": "docker run -d -p 8080:8080 --name docker_foo -v $(pwd)/app:/usr/src/docker_foo/app -v $(pwd)/test:/usr/src/docker_foo/test docker_foo", 
    "start": "nodemon --watch app server.js", 
    "logs": "docker logs -f admin_api", 
    "pretest": "npm run build", 
    "test": "docker run -p 8080:8080 --name docker_foo -it --rm docker_foo node_modules/.bin/istanbul cover node_modules/.bin/_mocha", 
    "prewatch": "npm run run", 
    "watch": "docker exec -it docker_foo node_modules/.bin/nodemon --exec \"node_modules/.bin/_mocha -w\"" 
} 

... так что я мог запустить «НПМ запустить запустить», и она будет работать мой экземпляр Docker в фоновом режиме с файловой системой службы, наложенной на мои собственные хосты, которые просматриваются nodemon для изменения файлов для быстрой разработки приложений, а затем я могу запускать журналы npm run, чтобы задержать журналы во время разработки.

В качестве альтернативы, теперь я могу запустить «просмотр часов npm», чтобы очистить, закрепить и доставить изображение докеры/контейнера/тома с помощью nodemon, чтобы перезапустить сервер и мокко наблюдать за приложением и тестовыми каталогами для повторного запуска тесты и постоянно выводят результаты в окно.