可以将Docker COPY命令链接在一起
是否有可能将COPY命令链接在一起,就像可以使用RUN命令一样?
链接运行命令示例:
RUN echo "root:user_2017" | chpasswd && \ groupadd -g 1000 user && \ useradd -u 1000 -m -s /bin/bash user && \ passwd -d user
如果我不得不从主机到图像执行多个副本,像下面显示的东西会阻止引入多个中间图像吗? 我知道下面显示的内容不起作用,因为当&&
用于将多行连接在一起时,每一行都需要是单独的命令。
COPY ./folder1A/* /home/user/folder1B/ && \ ./folder2A/* /home/user/folder2B/ && \ ./folder3A/* /home/user/folder3B/ && \ ./folder4A/* /home/user/folder4B/ && \
由于COPY
命令不能被链接,所以通常最好是以一种友好的方式来构build你的上下文(你正在复制的目录),以便复制到图像中。
所以,而不是:
COPY ./folder1A/* /home/user/folder1B/ && \ ./folder2A/* /home/user/folder2B/ && \ ./folder3A/* /home/user/folder3B/ && \ ./folder4A/* /home/user/folder4B/ && \
将这些文件夹放入一个公共目录并运行:
COPY user/ /home/user/
如果您正在复制文件,则可以将多个复制到一个目标中:
COPY file1.zip file2.txt file3.cfg /target/app/
如果你试图用一个目录来做到这一点,你会发现docker将它平滑一层,因此build议将你的目录重新组织到一个共同的父文件夹中。
不它不是。
RUN
在正在构build的容器内执行一个bash命令。 你引用的链接依赖于&&
操作符,它是一个执行左边命令的bash操作符,但是如果左边命令成功(只返回代码0),则只执行右边命令。
你只能把bash命令放在RUN
和CMD
/ ENTRYPOINT
。 所以不幸&&
在COPY
不能作为操作员工作。
你只需要做四个单独的COPY
语句。