当我使用Dockerfile构建映像时,如何停止构建?

时间:2018-11-01 07:38:33

标签: docker cloud containers dockerfile

我在下面的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
...

2 个答案:

答案 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命令。