Я пытаюсь создать пользовательское изображение Докера с помощью Dockerfile. Базовое изображение, которое я использую, является этим:
Мой Dockerfile похож на это:
FROM l3iggs/archlinux:latest
COPY source /srv/visitor
WORKDIR /srv/visitor
RUN pacman -Syyu --needed --noconfirm &&
pacman -S --needed --noconfirm cronie nodejs phantomjs &&
printf "1.2.3.4 www.hahaha.org \n" >> /etc/hosts &&
printf "*/2 * * * * node /srv/visitor/visitor.js \n" >> cronJobs &&
printf "*/5 * * * * killall -older-than 5m phantomjs \n" >> cronJobs &&
printf "0 0 * * * rm /srv/visitor/visitor-info.log \n" >> cronJobs &&
crontab cronJobs &&
rm cronJobs &&
npm install
EXPOSE 80
CMD ["/bin/sh", "-c"]
Теперь, когда это добирается до части "ВЫПОЛНЕНИЯ", где это, как предполагается, обновляет, это подвешивает и производит это сообщение об ошибке:
Step 3 : RUN pacman -Syyu --needed --noconfirm &&
---> Running in ae19ff7ca233
/bin/sh: -c: line 1: syntax error: unexpected end of file
INFO[0013] The command [/bin/sh -c pacman -Syyu --needed --noconfirm &&] returned a non-zero code: 1
Какие-либо идеи?
ОБНОВЛЕНИЕ 1:
Теперь, я подозреваю, что моя проблема больше имеет отношение к команде "RUN", чем с "pacman-Syyu" выполняемый в контейнере. Это не должно действительно тормозить вещи, но это ясно.
Вам не хватает \
для построения вашей команды из нескольких строк. Команда запуска должна выглядеть примерно так:
RUN pacman -Syyu --needed --noconfirm && \
pacman -S --needed --noconfirm cronie nodejs phantomjs && \
printf "1.2.3.4 www.hahaha.org \n" >> /etc/hosts && \
printf "*/2 * * * * node /srv/visitor/visitor.js \n" >> cronJobs && \
printf "*/5 * * * * killall -older-than 5m phantomjs \n" >> cronJobs && \
printf "0 0 * * * rm /srv/visitor/visitor-info.log \n" >> cronJobs && \
crontab cronJobs && \
rm cronJobs && \
npm install
Однако следует отметить пару моментов:
- add-host
: https://docs.docker.com/reference/commandline/cli/#adding-entries-to-a-container- hosts-файл . / bin / sh -c
. Docker действительно сделает это за вас, если вы просто передадите простую команду вне массива. См. Последнюю из трех форм CMD
по адресу https://docs.docker.com/reference/builder/#cmd .