Я пытаюсь настроить Clair (инструмент для сканирования уязвимостей изображений Docker). https://github.com/coreos/clair
У меня Clair работает нормально локально, используя docker-compose. Проблема заключается в том, что при развертывании его в AWS мне необходимо указать адрес сервера postgres, имя пользователя и пароль и т. Д. Адрес сервера postgres неизвестен при создании образа, поэтому его нельзя включить при создании образа док-станции Clair. Его необходимо настроить при запуске контейнера / образа.
Для других приложений, использующих базу данных, я обычно просто настраиваю образ докера и добавляю скрипт (который запускается при запуске), который использует SED для вставки правильных значений (взятых из переменных среды) в файл конфигурации приложений.
Например:
Dockerfile
FROM quay.io/coreos/clair:latest
COPY /docker/clair/runtime.sh /runtime.sh
RUN chmod +x /runtime.sh
CMD ["/runtime.sh"]
runtime.sh
sed -i -e "s,#POSTGRES_SERVER#,$POSTGRES_SERVER,g" config.yaml
По какой-то причине описанный выше подход не будет работать с образом докера Clair. Этот подход работал для многих других основных изображений, поэтому я думаю, что это нечто особенное в образе Клэр.
Я не получаю никаких ошибок, он просто игнорирует CMD ["/runtime.sh"]
в моем dockerfile и запускается, как обычно.
Кто-нибудь может указать, как я могу запустить свой собственный скрипт, или указать другой способ добиться того же?
=========== ОБНОВЛЕНИЕ С РЕШЕНИЕМ ===========
Проблема заключалась в том, что образ Clair основан на BusyBox, который по умолчанию использует оболочку ash
, а сценарий оболочки, который я написал / использую, написан для оболочки bash
. Возможно, это должно было быть очевидно, но я немного новичок в написании сценариев оболочки Linux и еще не сталкивался с этим.
Я понял это после тестирования ответа mchawre, который позволяет избежать проблемы, с которой я столкнулся, поскольку он не использует сценарий оболочки.
Таким образом, решение, которое я использовал, было установить bash
в образ, и тогда я смогу использовать мой обычный скрипт оболочки bash при запуске контейнера.
Dockerfile
FROM quay.io/coreos/clair:latest
RUN apk --no-cache upgrade
RUN apk add --no-cache curl py-pip bash postgresql-client figlet \
&& curl -L https://github.com/optiopay/klar/releases/download/v2.4.0/klar-2.4.0-linux-amd64 \
> /usr/local/bin/klar \
&& chmod +x /usr/local/bin/klar \
&& pip install awscli
# Copy in custom Clair config file
COPY /docker/clair/config.yaml /etc/clair/config.yaml
# Env Vars for use with Klar CLI
ENV CLAIR_ADDR http://127.0.0.1:6060
# Copy runtime script & make it executable
COPY /docker/clair/runtime.sh /runtime.sh
RUN chmod +x /runtime.sh
# Override the parent images ENTRYPOINT
# Run a script on container startup which does a few things in addition to starting Clair at the end.
# Note, this script is a BASH script. It is critical that you install bash into the docker image or this script will
# fail with errors that are not very helpful.
ENTRYPOINT ["/runtime.sh"]
runtime.sh (небольшая выдержка)
#!/bin/bash
echo "======= Configuring config.yaml ====="
sed -i -e "s,#POSTGRES_USER#,$POSTGRES_USER,g" /etc/clair/config.yaml
sed -i -e "s,#POSTGRES_PASSWORD#,$POSTGRES_PASSWORD,g" /etc/clair/config.yaml
sed -i -e "s,#POSTGRES_URL#,$POSTGRES_URL,g" /etc/clair/config.yaml
/clair -config=/etc/clair/config.yaml