Docker-使ADD命令取决于命令行参数

时间:2019-08-29 07:17:56

标签: docker

可以定制ADD命令以使用命令行参数。 基本上我有一个文件的不同版本,比如说file1和file2,并基于通过命令行传递的某些条件。

以下命令可以正常运行,并将file从主机传输到docker,但是我没有找到任何有条件的引用。
ADD target/file.yml file.yml

1 个答案:

答案 0 :(得分:0)

否,rm不支持复制文件的条件方式。

但是有一种方法可以在从主机处应对时处理此类配置。

  • 在您的情况下,将所有配置复制到某个临时位置将所有ADD复制到某个file1 file2位置,然后基于/temp传递到docker build,将ARG移动到file
  • 或者使用基于target而非基于ENV的docker入口点执行上述操作
ARG

内部版本:

这不会更新文件,将使用默认文件名file1复制

FROM alpine
ADD target/ /temp_target
RUN mkdir /target

#filename to be copied to the target 
ARG file_name

# pass update_file true or false if true file wil be update to new that is passed to build-args
ARG update_file

ENV file_name=$file_name
ARG update_file=$update_file

#check if update_file is set and its value is true then copy the file from temp to target, else copy file1 to target
RUN if [ ! -z "$update_file" ] && [ "${update_file}" == true ];then \
   echo "$update_file"; \
   echo "echo file in temp_target"; \
   ls /temp_target ;\
   echo "updating file target" ;\
   cp /temp_target/"${file_name}" /target/ ; \
   echo "list of updated files in target"; \
   ls /target ; \
   else \
   echo "copy with default file that is ${file_name}" ;\
   cp /temp_target/file1 /target ;\
   fi

这将更新目标中的文件,因此目标中的新文件为file2。

docker build --no-cache --build-arg file_name=file1 --build-arg update_file=false -t abc .