Я пытаюсь создать собственный образ Docker с помощью файла 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"]
Теперь, когда он доходит до части «RUN», где он должен обновиться, он зависает и выводит это сообщение об ошибке:
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-file./bin/sh -c
. Docker на самом деле сделает это за вас, если вы просто передадите простую команду за пределами массива. Посмотреть последний из трех CMD
формы в https://docs.docker.com/reference/builder/#cmd.