如何复制 Docker 中的文件?

How to copy file in Docker?

我有以下 Dockerfile:

FROM sonarqube

RUN wget https://github.com/gabrie-allaigre/sonar-gitlab-plugin/releases/download/4.0.0/sonar-gitlab-plugin-4.0.0.jar
COPY sonar-gitlab-plugin-4.0.0.jar /opt/sonarqube/extensions/plugins/

复制文件时出现以下错误:

Removing intermediate container 63a3ae1d7390
Step 3/3 : COPY sonar-gitlab-plugin-4.0.0.jar /opt/sonarqube/extensions/plugins/
lstat sonar-gitlab-plugin-4.0.0.jar: no such file or directory

这种情况下如何复制文件?

您 运行 wget 在容器内,但随后试图 COPY 它从 host 机器到容器。要从一个容器位置复制到另一个容器位置,只需使用 cp:

RUN wget https://github.com/gabrie-allaigre/sonar-gitlab-plugin/releases/download/4.0.0/sonar-gitlab-plugin-4.0.0.jar \
 && cp sonar-gitlab-plugin-4.0.0.jar /opt/sonarqube/extensions/plugins/

更好的是,一开始就使用 wget -O 将文件保存在所需位置。

RUN wget -o /opt/sonarqube/extensions/plugins/ \
        https://github.com/gabrie-allaigre/sonar-gitlab-plugin/releases/download/4.0.0/sonar-gitlab-plugin-4.0.0.jar 

您正在尝试复制容器中的文件,就好像它是本地文件一样,因此 Docker 无法找到它。

像这样使用 ADD 应该可以正常工作:

FROM sonarqube

ADD https://github.com/gabrie-allaigre/sonar-gitlab-plugin/releases/download/4.0.0/sonar-gitlab-plugin-4.0.0.jar /opt/sonarqube/extensions/plugins/

更多 "dockerlike"

COPY 命令将文件从主机复制到容器。
对于任何你想要在容器内 运行 的命令,你需要 RUN:

RUN wget https://github.com/gabrie-allaigre/sonar-gitlab-plugin/releases/download/4.0.0/sonar-gitlab-plugin-4.0.0.jar \
   && cp sonar-gitlab-plugin-4.0.0.jar /opt/sonarqube/extensions/plugins/