Docker CMD с envsubst и tee

#docker #fluentd

#docker #fluentd

Вопрос:

В настоящее время у меня есть файл Dockerfile со следующей строкой CMD:

 CMD ["/bin/bash", "-c", "envsubst < td-agent.conf | tee /etc/td-agent/td-agent.conf amp;amp; td-agent"]
  

Изображение строится нормально, но когда я иду, чтобы запустить его, он жалуется:

 Usage: td-agent [options]
-s, --setup [DIR=/etc/td-agent]  install sample configuration file to the directory
-c, --config PATH                config file path (default: /etc/td-agent/td-agent.conf)
    --dry-run                    Check fluentd setup is correct or not
-p, --plugin DIR                 add plugin directory
  

В основном жалуюсь, что я неправильно выполняю команду. Что странно, так это то, что если я запускаю контейнер (не выполняя никакой из этих замен), то эта команда отлично выполняется внутри контейнера.

Что я могу делать неправильно?

Ответ №1:

Существует две формы команды CMD:

CMD ["executable","param1","param2"] (форма exec) и

CMD command param1 param2 (форма оболочки)

По сути, вы используете форму exec, где вы должны использовать форму оболочки:

CMD envsubst < td-agent.conf | tee /etc/td-agent/td-agent.conf amp;amp; td-agent

И даже лучше:

CMD envsubst < td-agent.conf | tee /etc/td-agent/td-agent.conf amp;amp; exec td-agent

Дополнительная информация: https://docs.docker.com/engine/reference/builder/#/cmd

Комментарии:

1. Я устал делать это изменение, но оно по-прежнему выдает ту же ошибку.