如何通过docker RUN运行复制命令

6
我需要减小我的Docker镜像大小,因此我需要将所有的复制文件命令运行为单个shell命令。 这是我的Docker文件复制命令。
COPY rdkafka.ini /etc/php/7.0/mods-available/
COPY 20-rdkafka.ini /etc/php/7.0/apache2/conf.d/
COPY apache2.conf /etc/apache2/
COPY php.ini /etc/php/7.0/apache2/

合并为单个命令

RUN cp rdkafka.ini /etc/php/7.0/mods-available/ && cp 20-rdkafka.ini /etc/php/7.0/apache2/conf.d/ && apache2.conf /etc/apache2/ && php.ini /etc/php/7.0/apache2/

我遇到了这个错误

cp: cannot stat 'rdkafka.ini': No such file or directory

需要帮忙吗?

1个回答

7
这是因为RUN cp ...COPY不同。 COPY将文件从您的主机复制到镜像中,RUN在容器内部运行,在构建过程中失败,因为其中确实没有"没有此类文件或目录"。
并且查看COPY文档,确实没有一种方法可以使用一个COPY将多个文件复制到多个目标中,只能将多个源复制到一个目标。
如果您真的想这样做,您可能需要先将所有文件都复制到一个目录,例如/tmp,然后使用RUN cp /tmp/rdkafka.ini /etc/php/7.0/mods-available/ && ...

谢谢Teemu。我会尝试你的建议。 - Sujan Kumar Sakthi
@teemu-risikko 尝试了同样的方法,但没有成功。我收到了错误信息:cp: 无法访问文件或目录。我首先复制了所有文件,然后在 RUN 中运行 cp 命令。 - Roshan007

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