Контейнер Docker с redis запущен, так как демон не запускается - PullRequest
0 голосов
/ 22 мая 2018

У меня есть простой Dockerfile

FROM base

RUN <code which installs redis>
RUN npm install redis-adapter

EXPOSE 6379

ENTRYPOINT redis-server --daemonize yes && /app/tasks/redis/entrypoint.sh

И в моей точке входа я настраиваю некоторые конфигурационные ключи и настраиваю некоторые данные для повторного отображения через узел:

#!/bin/sh

redis-cli hset app:cfg env dev
redis-cli hset app:cfg maxconnections 1024

node /app/tasks/redis/init.js

Образ строится успешно,но когда я его запускаю - ничего не происходит.В чем проблема?Что я должен сделать, чтобы запустить Redis в контейнере и выполнить некоторые настройки после?Может быть проблема в том, что я запускаю redis как демон?

1 Ответ

0 голосов
/ 27 июня 2018

Ответ от автора

TL: DR

В Stackoverflow есть довольно похожий вопрос, который помогает решить мою проблему:

Проблема заключалась в том, что Docker ENTRYPOINT или CMD должен "порождать один процесс".И я положил запуск Redis и выполнение узла init.js как разные программы в supervisord.Предоставив supervisord.conf, например:

[supervisord]
nodaemon=true
loglevel=debug

[program:redis]
priority=1
command=redis-server

[program:configurations]
priority=2
command=/bin/sh -c /app/tasks/redis/entrypoint.sh

Почему я это сделал?

Основная проблема, с которой я столкнулся, заключалась в неправильном понимании того, что на самом деле являетсяДокер контейнер.А что значит ENTRYPOINT или CMD в Docker.Я подумал, что мне нужно просто «запустить какой-нибудь сервер в Docker и открыть какой-нибудь порт, а Docker все сделает сам» , но это не тот способ, которым работают контейнеры.Существует разница между контейнерами и виртуальными машинами.Посмотрите на это: Чем Docker отличается от виртуальной машины?

Когда вы думаете о контейнере Docker как обертке над одним процессом, кажется ясным, что код, написанный на моем Dockerfile, не будет работатьтак, как я ожидал.

Если необходимо выполнить несколько процессов в контейнере Docker, вам следует использовать что-то вроде supervisord или concurrently (если вы предпочитаете Node экосистему).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...