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!
是绊倒了事情。
希望这对需要的人有所帮助。
我想指示 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!
是绊倒了事情。
希望这对需要的人有所帮助。