Docker COPY命令可以链接吗?

20

是否可以像使用RUN命令一样链接COPY命令?

运行命令链接示例:

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/ && \
2个回答

19

由于COPY命令无法链接,通常最好将您要复制的上下文(即要从中复制的目录)结构化,使其更易于复制到镜像中。

因此,不要这样做:

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将其压缩了一级,因此建议您重新组织您的目录到一个共同的父文件夹中。


5
不是这样的。 RUN 在正在构建的容器内执行 bash 命令。你所提到的链接依赖于 && 运算符,它是一个 bash 运算符,如果左侧命令成功返回代码 0,则仅执行左侧命令,然后只执行右侧命令。
只能在 RUNCMD/ENTRYPOINT 中放置 bash 命令。因此,不幸的是,在 COPY 中无法使用 && 运算符。
相反,你需要编写四个单独的 COPY 语句。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接