Как настроить службу демона в Dockerfile для Google Cloud - PullRequest
0 голосов
/ 19 февраля 2019

Я хотел бы создать Dockerfile, который запускает прокси-сервис squid в Google Cloud.Я немного запутался с ENTRYPOINT:

FROM ubuntu:latest

ENV DEBIAN_FRONTEND noninteractive
ENV DEBCONF_NONINTERACTIVE_SEEN true
ENV SQUID_CACHE_DIR=/var/spool/squid
ENV SQUID_LOG_DIR=/var/log/squid

RUN apt-get install -y squid apache2-utils

COPY ./etc/squid/passwd /etc/squid
COPY ./etc/squid/squid.conf /etc/squid

EXPOSE 3128/tcp
WORKDIR /root

ENTRYPOINT service squid start && bash

Squid является фоновым сервисом, поэтому мне пришлось добавить команду "bash", чтобы контейнер работал и работал.Есть ли более правильный способ поддержания контейнера в рабочем состоянии?

Контейнер работает правильно, когда я запускаю его локально:

docker run -d --name docker_squid -p 3128:3128 --rm -t docker_squid bash

и

curl -x http://localhost:3128 -L https://www.example.com

ОднакоКогда я собираю и запускаю образ в облаке Google, кажется, что процесс squid продолжает перезапускаться, поэтому он полностью игнорирует оператор bash.Есть мысли?

В каких случаях было бы целесообразнее использовать:

CMD service squid start && tail -F /var/log/squid/access.log

1 Ответ

0 голосов
/ 19 февраля 2019

Как правило, вы должны предполагать, что такие команды, как service, просто не работают в Docker.Вы хотите, чтобы основным процессом контейнера была сама служба, что обычно означает непосредственный запуск процесса сервера. FAQ по Squid предлагает что-то вроде

CMD ["squid", "-NCd1"]

, где, в частности, опция -N заставляет его запускаться как процесс переднего плана, не являющийся демоном.

(Вы также должны предпочесть форму JSON-ish для CMD и ENTRYPOINT, если можете. Хотя многие люди предпочитают ENTRYPOINT, я всегда использую CMD, если это вариант, для упрощения переопределения во время docker run,и для разрешения шаблона сценария точки входа, который выполняет инициализацию перед запуском и затем запускает CMD.)

...