Estou tentando criar uma imagem personalizada do Docker usando um Dockerfile. A imagem base que estou usando é esta:
Meu Dockerfile é assim:
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"]
Agora, quando chega à parte "RUN", onde deveria ser atualizado, ele trava e exibe esta mensagem de erro:
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
Alguma ideia?
ATUALIZAÇÃO 1:
Agora, suspeito que meu problema tenha mais a ver com o comando "RUN" do que com o "pacman -Syyu" sendo executado dentro do contêiner. Isso realmente não deveria estar travando as coisas, mas claramente está.
Você está perdendo
\
para construir seu comando em várias linhas. O comando de execução deve se parecer mais com:Porém, algumas coisas a serem observadas:
--add-host
opção de tempo de execução para isso: https://docs.docker.com/reference/commandline/cli/#adding-entries-to-a-container-hosts-file ./bin/sh -c
. Na verdade, o Docker faz isso para você se você apenas passar um comando simples fora do array. Veja o último dos trêsCMD
formulários em https://docs.docker.com/reference/builder/#cmd .