作者:家具销售_903 | 来源:互联网 | 2023-05-25 19:02
所有,我正在尝试持久地将文件从我的主机复制到图像,以便这些文件可用于基于该图像启动的每个容器.在debian wheezy 64bit上运行作为virtualbox guest.
Dockerfile非常简单(安装八度图像):
FROM debian:jessie
MAINTAINER GG_Python <[redacted]@gmail.com>
RUN apt-get update
RUN apt-get update
RUN apt-get install -y octave octave-image octave-missing-functions octave-nan octave-statistics
RUN mkdir /octave
RUN mkdir /octave/libs
RUN mkdir /octave/libs/jsonlab
COPY ~/octave/jsonlab/loadjson.m /octave/libs/jsonlab/.
发出构建命令后,我得到以下跟踪: docker build -t octave .
Sending build context to Docker daemon 423.9 kB
Sending build context to Docker daemon
Step 0 : FROM debian:jessie
---> 58052b122b60
Step 1 : MAINTAINER GG_Python <[..]@gmail.com>
---> Using cache
---> 90d2dd2f7ee8
Step 2 : RUN apt-get update
---> Using cache
---> 4c72c25cd829
Step 3 : RUN apt-get update
---> Using cache
---> b52f0bcb9f86
Step 4 : RUN apt-get install -y octave octave-image octave-missing-functions octave-nan octave-statistics
---> Using cache
---> f0637ab96d5e
Step 5 : RUN mkdir /octave
---> Using cache
---> a2d278b2819b
Step 6 : RUN mkdir /octave/libs
---> Using cache
---> 65efbbe01c99
Step 7 : RUN mkdir /octave/libs/jsonlab
---> Using cache
---> e41b80901266
Step 8 : COPY ~/octave/jsonlab/loadjson.m /octave/libs/jsonlab/.
INFO[0000] ~/octave/jsonlab/loadjson.m: no such file or directory
Docker绝对拒绝将此文件从主机复制到映像中.不用说文件loadjson.m就在那里(cat显示),我所有改变路径的尝试(相对,绝对等)都失败了.有什么建议为什么这个简单的任务有问题?
1> kojiro..:
在我最初写这篇文章时,Docker没有扩展〜或$ HOME.现在它在构建上下文中进行了一些扩展,但即便如此,它们可能不是您想要的 - 它们不是您在上下文之外的主目录.您需要显式引用该文件,或者相对于Dockerfile本身打包它.
2> Javier Caste..:
Docker只能复制上下文中的文件,您删除的文件夹是dockerignore文件中列出的任何文件.
运行"docker build"时,docker会将上下文转移到您连接到的docker守护程序.它只允许您在上下文中复制文件,因为守护程序可能是远程计算机.
这是我的情况,我正在研究一个旧项目,我意识到我在`.dockerignore`中有一个"*"规则,非常感谢
3> Robert Brook..:
在理解上下文之前我无法让COPY工作(我试图从上下文之外复制文件)
docker build命令从Dockerfile和上下文构建映像.构建的上下文是指定位置PATH处的文件.PATH是本地文件系统上的目录.
递归处理上下文.因此,PATH包含任何子目录.
构建由Docker守护程序运行,而不是由CLI运行.构建过程所做的第一件事是将整个上下文(递归地)发送到守护进程.在大多数情况下,最好以空目录作为上下文,并将Dockerfile保存在该目录中.仅添加构建Dockerfile所需的文件.
警告:不要将根目录/ /用作PATH,因为它会导致构建将硬盘驱动器的全部内容传输到Docker守护程序.
参考:https:
//docs.docker.com/engine/reference/builder/#usage