我想指示 DockerCOPY从我的 Ubuntu 计算机上的本地/etc/文件夹获取我的证书。
我收到错误:
复制失败:在构建上下文中找不到文件或被 .dockerignore 排除:stat etc/.auth_keys/fullchain.pem:文件不存在
我没有排除在.dockerignore
我该怎么做?
Dockerfile:
FROM nginx:1.21.3-alpine
RUN rm /etc/nginx/conf.d/default.conf
RUN mkdir /etc/nginx/ssl
COPY nginx.conf /etc/nginx/conf.d
COPY ./etc/.auth_keys/fullchain.pem /etc/nginx/ssl/
COPY ./etc/.auth_keys/privkey.pem /etc/nginx/ssl/
WORKDIR /usr/src/app
Run Code Online (Sandbox Code Playgroud)
我也尝试过没有dot--> 相同的错误
COPY /etc/.auth_keys/fullchain.pem /etc/nginx/ssl/
COPY /etc/.auth_keys/privkey.pem /etc/nginx/ssl/
Run Code Online (Sandbox Code Playgroud)
通过将文件夹放在.auth_keysDockerfile 旁边 --> 可以,但不理想
COPY /.auth_keys/fullchain.pem /etc/nginx/ssl/
COPY /.auth_keys/privkey.pem /etc/nginx/ssl/
Run Code Online (Sandbox Code Playgroud)
gol*_*pha 16
在这种情况下,@JustLudo 的答案是正确的。但是,对于那些在构建目录中拥有正确文件但仍然看到此问题的人;删除所有尾随注释。
来自 C 和 javascript 背景的人可能会假设忽略尾随注释(例如COPY my_file /etc/important/ # very important!),但事实并非如此!从我的 docker 版本(20.10.11)开始,错误消息不会指出这一点。
例如上面的错误行会报错:
COPY failed: file not found in build context or excluded by .dockerignore: stat etc/important/: file does not exist
...即没有提及是尾随# important!导致了事情的发生。
nns*_*nse 14
同样重要的是要注意,正如文档中提到的:
如果您使用 STDIN 或指定指向纯文本文件的 URL,系统会将内容放入名为 Dockerfile 的文件中,并且任何 -f、--file 选项都会被忽略。在这种情况下,没有上下文。
也就是说,如果你build像这样运行:
docker build -t dh/myimage - < Dockerfile_test
Run Code Online (Sandbox Code Playgroud)
任何没有上下文的COPYor都会抛出提到的错误或其他类似的错误:ADD
failed to compute cache key: "xyz" not found: not found
Run Code Online (Sandbox Code Playgroud)
如果您遇到此错误并且正在通过管道传输您的Dockerfile,那么我建议使用-f目标自定义Dockerfile.
docker build -t dh/myimage -f Dockerfile_test .
Run Code Online (Sandbox Code Playgroud)
(.将上下文设置为当前目录)
您可以自己做一个测试:
Dockerfile_test文件,其中包含以下内容FROM nginx:1.21.3-alpine
COPY test_file /my_test_file
Run Code Online (Sandbox Code Playgroud)
touch test_file
Run Code Online (Sandbox Code Playgroud)
build管道测试Dockerfile,看看它是如何失败的,因为它没有上下文:docker build -t dh/myimage - < Dockerfile_test
[..]
failed to compute cache key: "/test_file" not found: not found
[..]
Run Code Online (Sandbox Code Playgroud)
buildwith -f,看看它是如何Dockerfile工作的,因为它有上下文:docker build -t dh/myimage -f Dockerfile_test .
[..]
=> [2/2] COPY test_file /my_test_file
=> exporting to image
[..]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
159336 次 |
| 最近记录: |