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

Docker: COPY failed: file not found in build context (Dockerfile)

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

我收到错误:

COPY failed: file not found in build context or excluded by .dockerignore: stat etc/.auth_keys/fullchain.pem: file does not exist

我没有排除在.dockerignore

我该怎么做?

Docker文件:

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 放在 Docker 文件旁边 --> 可以,但不理想

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

dockercontext是Dockerfile所在的目录。如果要构建镜像是必须要面对的限制之一。

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

所以你的观察是正确的,你需要把你需要复制的文件放在同一个目录下。

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

@JustLudo 的回答是正确的,在这种情况下。但是,对于那些在 build 目录中有正确文件并且 still 看到这个问题的人;删除任何尾随评论。

来自 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! 是绊倒了事情。

希望这对需要的人有所帮助。