我在下面的Dockerfile中写了一些shell代码来检查容器中的某些目录,如果它没有要停止构建的文件夹,那么我应该在Dockerfile中写什么来停止它呢?
FROM XXX
...
RUN if [ -d "/app/bin" -a -d "/app/lib" -a -d "/app/conf" -a -d "/app/resource" -a -d "/app/log" -a -f "/app/bin/start.sh" ]; then mkdir -p /app/control/bin; else SOME_CODES_TO_STOP_BUILDING; fi
...
答案 0 :(得分:1)
任何失败(返回0以外的退出状态)的shell命令都将停止构建。一些例子:
# Probably the most idiomatic shell scripting: if the test
# returns false, then the "&&" won't run mkdir, and the whole
# command returns false
RUN test -d /app/bin -a ... \
&& mkdir /app/control/bin
# "test" and "[" are the same thing
RUN [ -d /app/bin -a ... ] \
&& mkdir /app/control/bin
# This first step will just blow up the build if it fails
RUN [ -d /app/bin -a ... ]
# Then do the on-success command
RUN mkdir /app/control/bin
# Your original suggestion
# /bin/false does nothing but returns 1
RUN if [ -d /app/bin -a ... ]; \
then mkdir /app/control/bin; \
else false; \
fi
答案 1 :(得分:0)
您是否要在构建映像之前检查这些目录?我建议仅在目录存在时创建一个shell脚本并执行docker build命令。