Я создаю простой образ: тот, который содержит Riak (база данных NoSQL). Изображение запускает службу Riak с riak start
как CMD. Теперь, если я запускаю его как демон с помощью docker run -d quintenk/riak-dev
, он запускает процесс Riak (я вижу это в журналах). Однако через несколько секунд он автоматически закрывается. Если я запускаю его с помощью docker run -i -t quintenk/riak-dev /bin/bash
, процесс riak не запускается (UPDATE: см. Ответы для объяснения этого). Фактически, никакие службы не работают вообще. Я могу запустить его вручную с помощью терминала, но я бы хотел, чтобы Riak начал автоматически. Я полагаю, что это поведение будет происходить и для других сервисов, а Riak - всего лишь пример.
Итак, запуск/перезапуск контейнера должен автоматически запускать Riak. Каков правильный подход к настройке?
Для справки, вот файл Docker, с помощью которого можно создать изображение (UPDATE: изменено с помощью выбранного ответа):
FROM ubuntu:12.04
RUN apt-get update
RUN apt-get install -y openssh-server curl
RUN curl http://apt.basho.com/gpg/basho.apt.key | apt-key add -
RUN bash -c "echo deb http://apt.basho.com precise main > /etc/apt/sources.list.d/basho.list"
RUN apt-get update
RUN apt-get -y install riak
RUN perl -p -i -e 's/(?<=\{http,\s\[\s\{")127\.0\.0\.1/0.0.0.0/g' /etc/riak/app.config
EXPOSE 8098
CMD /bin/riak start && tail -F /var/log/riak/erlang.log.1
EDIT: -f изменен на -F в CMD в соответствии с sesm его замечанием
МОЙ СОБСТВЕННЫЙ ОТВЕТ
После работы с Docker в течение некоторого времени я взял привычку использовать supervisord для настройки моих процессов. Если вам нужен пример кода для этого, посмотрите https://github.com/Krijger/docker-cookbooks. Я использую свое изображение супервизора в качестве базы для всех моих других изображений. Я написал блог с помощью супервизора здесь.