ubuntu Docker:复制失败:在生成上下文中找不到文件(Dockerfile)

bwitn5fc  于 2022-10-27  发布在  Docker
关注(0)|答案(4)|浏览(355)

我想指示Docker在我的Ubuntu机器上的本地/etc/文件夹中COPY我的证书。
我得到的错误是:
复制失败:在生成上下文中找不到文件或文件被.dockerIgnore:stat等/.auth_key/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/
wh6knrhe

wh6knrhe1#

Docker上下文是Dockerfile所在的目录。如果你想建立一个形象,这是你必须面对的限制之一。
this documentation中,您可以看到如何切换上下文,但为了简单起见,只需将相同的目录视为上下文。注意:这也不适用于符号链接。
因此,您的观察是正确的,您需要将需要复制的文件放在同一目录中。
或者,如果您不需要复制它们,但在运行时仍然可以使用它们,您可以选择挂载。我可以想象这在您的情况下不起作用,因为您可能需要在容器启动时使用这些文件。

6rqinv9w

6rqinv9w2#

在这种情况下,@JustLudo的答案是正确的。但是,对于那些在构建目录中有正确的文件并且仍然看到这个问题的人,请删除任何尾随的注解。
来自C和Java的背景,假设后面的注解被忽略是情有可原的(例如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!把事情绊倒了。

b4qexyjb

b4qexyjb3#

还需要注意的是,作为mentioned into the docs
如果使用STDIN或指定指向纯文本文件的URL,系统会将内容放入一个名为Dockerfile的文件中,并且忽略任何-f,--file选项。在此场景中,没有上下文
也就是说,如果您像这样运行build

docker build -t dh/myimage - < Dockerfile_test

任何没有上下文的COPYADD都会抛出上述错误或其他类似的错误:

failed to compute cache key: "xyz" not found: not found

如果您遇到这个错误,并且您正在通过管道传输Dockerfile,那么我建议您使用-f来瞄准自定义的Dockerfile

docker build -t dh/myimage -f Dockerfile_test .

(.设置当前目录的上下文)
下面是一个你可以自己做的测试:
1.在空目录中,创建一个Dockerfile_test文件,内容如下

FROM nginx:1.21.3-alpine
COPY test_file /my_test_file

1.然后创建一个虚拟文件:

touch test_file

1.运行build管道测试Dockerfile,查看它如何失败因为它没有上下文

docker build -t dh/myimage - < Dockerfile_test
[..]
failed to compute cache key: "/test_file" not found: not found
[..]

1.现在使用-f运行build,看看相同的Dockerfile是如何工作的因为它有上下文

docker build -t dh/myimage -f Dockerfile_test .
[..]
 => [2/2] COPY test_file /my_test_file
 => exporting to image
[..]
ef1yzkbh

ef1yzkbh4#

我只是在构建Windows容器时引用了源文件,例如,
COPY "file with space.txt" c:/some_dir/new_name.txt
多克不喜欢这些引语。

相关问题