В документации Dockerfile указано, что если вы используете форму оболочки ENTRYPOINT
, то CMD
полностью игнорируется.Если бы это было не так, то CMD
был бы добавлен в основном так, как вы показываете.
Если это просто запись в журнал, я бы рекомендовал установить драйвер ведения журнала Docker над попыткой настроить логирование внутри контейнера.Это упрощает настройку вашего изображения (для этого нужно только приложение, а не все возможные цели журнала).Оба logstash и fluentd являются популярными инструментами для перемещения сообщений журнала.
Если вы смотрите на более сложные сценарии, я почти всегда записывал бы это вавтономный сценарий оболочки, вместо того, чтобы пытаться записать его непосредственно в Dockerfile.
...
COPY docker-entrypoint.sh /
RUN chmod +x /docker-entrypoint.sh
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["node", "."]
Сценарий точки входа получит командную часть в качестве аргументов командной строки.Обычно это заканчивается на exec "$@"
, чтобы просто выполнить эту команду.Если вы хотите, чтобы оболочка оболочки была основным контейнерным процессом, вы можете передать куда-нибудь вывод команды
#!/bin/sh
"$@" | send_logs_to_elasticsearch