У меня есть файл Docker, который создает образ для большого проекта Perl.Последняя строка этого dockerfile запускает скрипт, который выполняет установку cpan для примерно 200 модулей.Кажется, что все это работает нормально, за исключением того, что через некоторое время модули перестают устанавливаться, и докер переходит к следующему шагу.Это как если бы у команды RUN был какой-то тайм-аут для сценария bash.
Кто-нибудь знает о таком таймауте?Я использую сценарий в 2 раза:
Перечисление 200 модулей в моем файле dockerfile увеличивает общий размер / делает его немного грубым для поддержки.
CPAN может иногда оказаться нереальным для поиска модулей, поэтому я использую сценарий для ведения списка модулей, которые не удалось установить, и повторите попытку после завершения начальной установки.
FROM ubuntu:16.04
COPY docker-configs/perl/ /myapp/
RUN apt-get update && \
apt-get -qy upgrade && \
apt-get install -qy perl build-essential cpanminus perl-doc perl-base perl-modules curl vim ssmtp && \
cat /myapp/libs.txt | xargs apt-get install -qy && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*, /tmp/*, /var/tmp/*
COPY lib/ /myapp/lib/
COPY bin/ /myapp/bin/
COPY docker-scripts/install_perl_modules.sh /myapp/
#Install CPAN modules
RUN bash /myapp/install_perl_modules.sh
Редактировать: см. Ниже скрипт для установки модулей CPAN:
while read p; do
cpanm $p
if [[ $? == 1 ]]; then
echo "!!!"
echo "!!! $p failed install! Will re-attempt later..."
echo "!!!"
RETRY="$RETRY $p"
else
echo "-- installed $p"
echo "--"
fi
done < /myapp/modules.txt
while read p; do
echo "-- 2nd attept to install $p"
cpanm $p
if [[ $? == 1 ]]; then
FAILED="$FAILED $p"
fi
done
Я немного сократил скрипт, но вы должны увидеть общий поток.