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

Suj*_*mar 2 docker dockerfile

我需要减小我的 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 Code Online (Sandbox Code Playgroud)

进入单个命令

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/
Run Code Online (Sandbox Code Playgroud)

我收到此错误

cp: cannot stat 'rdkafka.ini': No such file or directory
Run Code Online (Sandbox Code Playgroud)

有什么帮助吗?

Tee*_*kko 6

这是因为RUN cp ...与COPY. COPY将文件从主机复制到映像,在其构建过程中在容器内RUN运行,但由于其中确实存在“没有此类文件或目录”而失败。

查看COPY 文档,确实没有一种方法可以将多个文件复制到多个目的地COPY,只有多个源到一个目的地。

如果您真的想要,您可能可以做的是COPY首先将所有内容放到一个目录中,例如/tmp,然后使用RUN cp /tmp/rdkafka.ini /etc/php/7.0/mods-available/ && ....