我正在尝试使用 Dockerfile 构建自定义 Docker 映像。我使用的基本图像是这个:
我的 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”有关。这真的不应该是刹车,但它显然是。
您缺少
\
跨多行构建命令。运行命令应该更像:不过,有几点需要注意:
--add-host
运行时选项:https ://docs.docker.com/reference/commandline/cli/#adding-entries-to-a-container-hosts-file 。/bin/sh -c
. 如果您只是在数组之外传递一个裸命令,Docker 实际上会为您执行此操作。请参阅https://docs.docker.com/reference/builder/#cmd上三种CMD
形式中的最后一种。