Перезапустить блог-призрак, работающий внутри Docker

Я использую официальный образ Ghost Docker, и призрак работает без проблем.

Я разрабатываю тему локально на хосте, которая монтируется как том внутри контейнера. Как и в случае с любым запущенным экземпляром ghost, чтобы увидеть изменения темы, мне нужно остановить и перезапустить ghost.

Обычно это просто означает завершение процесса Node и повторный запуск npm start. Но внутри официального образа Docker это не вариант. Если я попытаюсь запустить npm start, мне скажут:

ERROR: (EADDRINUSE) Cannot start Ghost.

что имеет смысл, поскольку порт is уже используется.

Я безуспешно пытался вручную убить процессы. Если я убью процесс узла с помощью

kill -9 *node process ID*

Контейнер вылетает. Я пробовал также убить процесс npm, но, похоже, он никогда не выходит из строя.

Любые идеи?


person duncanhall    schedule 09.01.2016    source источник
comment
Обычно вы просто убиваете и перезапускаете контейнер. Вместо того, чтобы редактировать файлы внутри контейнера, подумайте о том, чтобы сделать файлы конфигурации доступными для контейнера в качестве тома хоста с помощью параметра -v.   -  person larsks    schedule 09.01.2016
comment
Именно этим я и занимаюсь - как упоминалось выше: Я разрабатываю тему локально на хосте, которая монтируется как том внутри контейнера.   -  person duncanhall    schedule 09.01.2016
comment
Убийство и перезапуск контейнера не обязательно перезапускают процесс узла внутри контейнера?   -  person duncanhall    schedule 09.01.2016
comment
Удаление контейнера приведет к уничтожению любых процессов, запущенных этим контейнером.   -  person larsks    schedule 10.01.2016
comment
Верно, но это не решает проблемы. Я монтирую том точно, поэтому мне не нужно постоянно останавливать / запускать контейнеры, но неясно, как остановить / перезапустить процесс-призрак узла, когда он запущен внутри контейнера.   -  person duncanhall    schedule 10.01.2016
comment
Как правило, в контейнере выполняется один процесс; в большинстве случаев вам не нужно вводить контейнер (не рассматривайте их как виртуальные машины, рассматривайте их как сам процесс). docker restart <mycontainer> должен перезапустить призрак (и контейнер)   -  person thaJeztah    schedule 10.01.2016
comment
Да, я не понимаю, почему вы различаете остановку / запуск контейнера и остановку / запуск призрачного процесса. В большинстве случаев эти две вещи должны быть функционально идентичными.   -  person larsks    schedule 10.01.2016
comment
Я ценю любой вклад, но это все еще позволяет избежать фактического вопроса. Я совершенно ясно понимаю жизненные циклы контейнеров докеров - этот вопрос не совсем о докере, это о реализации докера для призрака. Без каких-либо подробностей о докере я просто пытаюсь понять, как в этом контексте запускается и останавливается процесс-призрак.   -  person duncanhall    schedule 10.01.2016


Ответы (1)


Вот как я развертываю свой блог-призрак в докере:

docker run --name some-blog -d -p 80:2368 -e VIRTUAL_HOST=domain.com -v /home/ghost/blogfiles/:/var/lib/ghost --restart unless-stopped ghost

--restart unless-stopped полезен, когда контейнеры докеров случайно вылетают из строя. Он автоматически перезапустит их.

Перечислив свои докер-контейнеры, выполнив docker ps, вы должны получить что-то вроде этого:

CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                                            NAMES
11d2517205de        ghost                    "/entrypoint.sh npm s"   2 hours ago         Up About a minute   0.0.0.0:80->2368/tcp                             some-blog

Чтобы перезапустить контейнер докера, вы можете выполнить docker stop [container id] и docker start [container id] или просто docker restart [container id].

person Firas E.    schedule 27.07.2016