Docker:复制失败:在构建上下文中找不到文件(Dockerfile)

新手上路,请多包涵

我想指示 Docker COPY 我的证书来自本地 /etc/ 我的 Ubuntu 机器上的文件夹。

我得到错误:

复制失败:在构建上下文中找不到文件或被 .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

我也试过没有 dot –>同样的错误

COPY /etc/.auth_keys/fullchain.pem /etc/nginx/ssl/
COPY /etc/.auth_keys/privkey.pem /etc/nginx/ssl/

通过将文件夹 .auth_keys 放在 Dockerfile 旁边 –> 可以,但不理想

COPY /.auth_keys/fullchain.pem /etc/nginx/ssl/
COPY /.auth_keys/privkey.pem /etc/nginx/ssl/

原文由 Jaco 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 4.3k
2 个回答

docker 上下文是 Dockerfile 所在的目录。如果你想构建一个镜像,这是你必须面对的限制之一。

本文档 中,您可以看到如何切换上下文,但为了简单起见,只需将同一目录视为上下文。笔记;这也不适用于符号链接。

所以您的观察是正确的,您需要将需要复制的文件放在同一目录中。

或者,如果您不需要复制它们但在运行时仍然可以使用它们,您可以选择挂载。我可以想象这在您的情况下不起作用,因为您可能在容器启动时需要这些文件。

原文由 JustLudo 发布,翻译遵循 CC BY-SA 4.0 许可协议

在这种情况下,@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! 是绊倒的事情。

原文由 goldfishalpha 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题