Dockerfile中的copy命令使用

 更新时间:2025年02月25日 09:33:52   作者:七号7  
在使用Dockerfile中的copy命令时,如果使用相对路径并且文件不在当前目录下,会导致构建失败,需要使用绝对路径或者将文件移动到Dockerfile所在的目录下

Dockerfile中的copy命令

在编写Dockerfile的时候copy宿主机文件到镜像中,在执行构建的时候报错

guoliang@gldeMacBook-Pro docker_file % docker build -f Dockerfile -t jmeter01 .
[+] Building 3.3s (15/16)                                                                                                 
 => [internal] load build definition from Dockerfile                                                                 0.0s
 => => transferring dockerfile: 860B                                                                                 0.0s
 => [internal] load .dockerignore                                                                                    0.0s
 => => transferring context: 2B                                                                                      0.0s
 => [internal] load metadata for docker.io/library/java:8                                                            3.1s
 => [auth] library/java:pull token for registry-1.docker.io                                                          0.0s
 => [ 1/11] FROM docker.io/library/java:8@sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d    0.0s
 => [internal] load build context                                                                                    0.1s
 => => transferring context: 2B                                                                                      0.1s
 => CACHED [ 2/11] RUN mkdir /jmeterdocker                                                                           0.0s
 => CACHED [ 3/11] RUN mkdir -p /jmeterdocker/test                                                                   0.0s
 => CACHED [ 4/11] RUN mkdir -p /jmeterdocker/test/input/jmx                                                         0.0s
 => CACHED [ 5/11] RUN mkdir -p /jmeterdocker/test/input/testdata                                                    0.0s
 => CACHED [ 6/11] RUN mkdir -p /jmeterdocker/test/report/html                                                       0.0s
 => CACHED [ 7/11] RUN mkdir -p /jmeterdocker/test/report/jtl                                                        0.0s
 => CACHED [ 8/11] RUN mkdir -p /jmeterdocker/test/report/outputdata                                                 0.0s
 => CACHED [ 9/11] RUN cd /jmeterdocker                                                                              0.0s
 => ERROR [10/11] COPY   ../apache-jmeter-5.4.1.tgz /jmeterdocker                                                    0.0s
------
 > [10/11] COPY   ../apache-jmeter-5.4.1.tgz /jmeterdocker:
------
failed to compute cache key: "/apache-jmeter-5.4.1.tgz" not found: not found

看下Dockerfile

FROM java:8

MAINTAINER <qihao@163.com>

ENV http_proxy ""
ENV https_proxy ""

RUN mkdir /jmeterdocker
RUN mkdir -p /jmeterdocker/test
RUN mkdir -p /jmeterdocker/test/input/jmx
RUN mkdir -p /jmeterdocker/test/input/testdata
RUN mkdir -p /jmeterdocker/test/report/html
RUN mkdir -p /jmeterdocker/test/report/jtl
RUN mkdir -p /jmeterdocker/test/report/outputdata
RUN cd /jmeterdocker

ENV JMETER_VERSION=5.4.1
ENV JMETER_HOME=/jmeterdocker/apache-jmeter-${JMETER_VERSION}
ENV JMETER_PATH=${JMETER_HOME}/bin:${PATH}
ENV PATH=${JMETER_HOME}/bin:${PATH}

COPY   ../apache-jmeter-5.4.1.tgz /jmeterdocker

RUN cd /jmeterdocker && tar xvf apache-jmeter-5.4.1.tgz && rm apache-jmeter-5.4.1.tgz	

可以看到Copy的文件使用的是相对路径(把jmetercopy到镜像的jmeterdocker文件中)

我的jmeter.tgz存放在Docker的上一级目录中。

命令执行后报错提示找不到

failed to compute cache key: "/apache-jmeter-5.4.1.tgz" not found: not found

后来又尝试使用绝对路径更改如下

使用绝对路径

FROM java:8

MAINTAINER <qihao@163.com>

ENV http_proxy ""
ENV https_proxy ""

RUN mkdir /jmeterdocker
RUN mkdir -p /jmeterdocker/test
RUN mkdir -p /jmeterdocker/test/input/jmx
RUN mkdir -p /jmeterdocker/test/input/testdata
RUN mkdir -p /jmeterdocker/test/report/html
RUN mkdir -p /jmeterdocker/test/report/jtl
RUN mkdir -p /jmeterdocker/test/report/outputdata
RUN cd /jmeterdocker

ENV JMETER_VERSION=5.4.1
ENV JMETER_HOME=/jmeterdocker/apache-jmeter-${JMETER_VERSION}
ENV JMETER_PATH=${JMETER_HOME}/bin:${PATH}
ENV PATH=${JMETER_HOME}/bin:${PATH}

COPY   /Users/guoliang/Documents/Work/apache-jmeter-5.4.1.tgz /jmeterdocker

RUN cd /jmeterdocker && tar xvf apache-jmeter-5.4.1.tgz && rm apache-jmeter-5.4.1.tgz	

build之后报错内容

guoliang@gldeMacBook-Pro docker_file % docker  build -f Dockerfile -t jmeter001 .                                                                 
[+] Building 1.2s (14/15)                                                                                                                              
 => [internal] load build definition from Dockerfile                                                                                              0.0s
 => => transferring dockerfile: 177B                                                                                                              0.0s
 => [internal] load .dockerignore                                                                                                                 0.0s
 => => transferring context: 2B                                                                                                                   0.0s
 => [internal] load metadata for docker.io/library/java:8                                                                                         1.1s
 => [ 1/11] FROM docker.io/library/java:8@sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d                                 0.0s
 => [internal] load build context                                                                                                                 0.0s
 => => transferring context: 2B                                                                                                                   0.0s
 => CACHED [ 2/11] RUN mkdir /jmeterdocker                                                                                                        0.0s
 => CACHED [ 3/11] RUN mkdir -p /jmeterdocker/test                                                                                                0.0s
 => CACHED [ 4/11] RUN mkdir -p /jmeterdocker/test/input/jmx                                                                                      0.0s
 => CACHED [ 5/11] RUN mkdir -p /jmeterdocker/test/input/testdata                                                                                 0.0s
 => CACHED [ 6/11] RUN mkdir -p /jmeterdocker/test/report/html                                                                                    0.0s
 => CACHED [ 7/11] RUN mkdir -p /jmeterdocker/test/report/jtl                                                                                     0.0s
 => CACHED [ 8/11] RUN mkdir -p /jmeterdocker/test/report/outputdata                                                                              0.0s
 => CACHED [ 9/11] RUN cd /jmeterdocker                                                                                                           0.0s
 => ERROR [10/11] COPY   /Users/guoliang/Documents/Work/apache-jmeter-5.4.1.tgz /jmeterdocker                                                     0.0s
------
 > [10/11] COPY   /Users/guoliang/Documents/Work/apache-jmeter-5.4.1.tgz /jmeterdocker:
------
failed to compute cache key: "/Users/guoliang/Documents/Work/apache-jmeter-5.4.1.tgz" not found: not found

后查询Docker文档,它说不能使用相对路径。

当我将jmeter.tgz文件移动到Dockerfile同目录下在进行build后Dockerfile执行成功。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • docker安装并持久化postgresql数据库的操作步骤

    docker安装并持久化postgresql数据库的操作步骤

    这篇文章主要介绍了docker安装并持久化postgresql数据库的操作步骤,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • 详解Docker+Jenkins+Gitlab+Django应用部署实践

    详解Docker+Jenkins+Gitlab+Django应用部署实践

    这篇文章主要介绍了Docker+Jenkins+Gitlab+Django应用部署实践,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • 清理Docker磁盘空间的几种有效方法

    清理Docker磁盘空间的几种有效方法

    随着Docker的广泛使用,管理Docker占用的磁盘空间变得越来越重要,长时间运行Docker环境,未使用的容器、镜像、卷和网络等会逐渐积累,占用大量磁盘空间,本文将介绍几种清理Docker磁盘空间的有效方法,需要的朋友可以参考下
    2024-08-08
  • 详解Docker Compose 中可用的环境变量问题

    详解Docker Compose 中可用的环境变量问题

    Compose 的多个部分在某种情况下处理环境变量。这篇文章主要介绍了Docker Compose 中可用的环境变量问题,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • Docker 镜像优化(从1.16GB到22.4MB)

    Docker 镜像优化(从1.16GB到22.4MB)

    在这篇文章中,我将重点讨论如何优化 Docker 镜像以使其轻量化,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • 在docker下删除两个id相同的镜像的操作

    在docker下删除两个id相同的镜像的操作

    这篇文章主要介绍了在docker下删除两个id相同的镜像的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Docker中RocketMQ的安装与使用详解

    Docker中RocketMQ的安装与使用详解

    这篇文章主要介绍了Docker中RocketMQ的安装与使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • 在Ubuntu 16.04上用Docker Swarm和DigitalOcean创建一个Docker容器集群的方法

    在Ubuntu 16.04上用Docker Swarm和DigitalOcean创建一个Docker容器集群的方法

    这篇文章主要介绍了在Ubuntu 16.04上用Docker Swarm和DigitalOcean创建一个Docker容器集群的方法,需要的的朋友参考下吧
    2017-01-01
  • docker+jenkins+gitee配置持续集成部署方式

    docker+jenkins+gitee配置持续集成部署方式

    这篇文章主要介绍了docker+jenkins+gitee配置持续集成部署方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • 查看Docker停止容器占用的内存的实现方法小结

    查看Docker停止容器占用的内存的实现方法小结

    要查看 Docker 停止的容器占用的内存,可以通过以下几种方法来实现,Docker 提供了一些命令和工具来帮助你管理和监控容器的资源使用情况,需要的朋友可以参考下
    2024-11-11

最新评论