我的根(〜)文件夹中设置了一个Dockerfile。我文件的前三行如下所示:
COPY file1 /root/folder/
COPY file2 /root/folder/
COPY file3 /root/folder/
但它为每一行返回以下错误:
无此文件或目录
这些文件与Dockerfile位于同一目录中,并且我docker build - < Dockerfile
也在终端的同一目录中运行命令。
我到底在做什么错?
我的根(〜)文件夹中设置了一个Dockerfile。我文件的前三行如下所示:
COPY file1 /root/folder/
COPY file2 /root/folder/
COPY file3 /root/folder/
但它为每一行返回以下错误:
无此文件或目录
这些文件与Dockerfile位于同一目录中,并且我docker build - < Dockerfile
也在终端的同一目录中运行命令。
我到底在做什么错?
Answers:
在复制指令Dockerfile
副本中的文件src
的dest
文件夹。像你看起来是丢失了file1
,file2
并且file3
还是试图建立Dockerfile
从错误的文件夹。
此外,用于构建的命令Dockerfile
应类似。
cd into/the/folder/
docker build -t sometagname .
还要检查.dockerignore
文件。
我知道这是一种非常罕见的情况,但是我在那儿提到了那个文件。
ripgrep
未在dotfile中搜索,因此没有看到对旧目录的最后一个讨厌的引用。
这可能是由于您将file1 / file2 / file3引用为不在构建上下文中的绝对路径而引起的,Docker仅在构建上下文中搜索该路径。
例如,如果您使用COPY / home /您的名称/文件1,则Docker构建会将其解释为$ {docker构建工作目录} / home /您的名称/文件1,如果此处没有同名文件,则不会引发文件或目录错误。
请参阅Docker问题之一
ADD
指令问题,谢谢。
运行正常docker build . -f docker/development/Dockerfile
,它使您可以从应用程序的根目录以外的指定目录运行docker文件。
使用-f
或--file
指定的名称和位置Dockerfile
。
尝试从其他目录运行docker文件时,这发生在我身上。
我有,COPY failed: stat /var/lib/docker/tmp/docker-builder929708051/XXXX: no such file or directory
并通过指定docker文件设法解决了这一问题。
正是docker build docker/development/Dockerfile
这导致了我这个问题。
一开始我发现它很奇怪,因为当我Dockerfile
在apps根目录中有它时,它可以正常工作。如果您想更好地管理环境docker文件,这将有所帮助。
docker build . -f docker/development/Dockerfile
这行得通
Docker put_archive文件未找到错误。我正在将Python API用于docker。Docker版本1.12.5,内部版本7392c3b
docker.errors.NotFound: 404 Client Error: Not Found ("lstat /var/lib/docker/aufs/mnt/39d58e00519ba4171815ee4444f3c43d2c6a7e285102747398f6788e39ee0e87/var/lib/neo4j/certificates: no such file or directory")
我无法将文件复制到创建的Docker容器中。
con = cli.create_container(...)
cli.put_archive(...)
cli.start(con['Id'])
如果更改操作顺序,则不会出现错误,并且文件将完全复制到我想要的位置。所以我知道我的代码可以正常工作,并且可以做我想要的事情。但是在启动之前将配置文件复制到容器很重要。启动后处理文件会导致容器以默认配置而不是自定义配置启动,而自定义配置需要在容器启动之前复制到位。Docker声称此问题已解决,但仍在影响我的应用程序。
这有效;同一代码执行顺序不同。
con = cli.create_container(...)
cli.start(con['Id'])
cli.put_archive(...)
如果您确定自己做了正确的事,但是docker仍然抱怨,请看一下这个问题:https : //github.com/moby/moby/issues/27134。
我为此感到烦恼,似乎重启docker engineservice docker restart
只会解决此问题。
我遇到了这个。复制某些目录无效。复制文件了。原来是因为.gitignore(不仅仅是.dockerignore)中包含的文件也被忽略了。参见:https : //github.com/zeit/now/issues/790
.dockerignore
的罪魁祸首
类似,感谢tslegaitis的回答,之后
gcloud builds submit --config cloudbuild.yaml .
表明
Check the gcloud log [/home/USER/.config/gcloud/logs/2020.05.24/21.12.04.NUMBERS.log] to see which files and the contents of the
default gcloudignore file used (see `$ gcloud topic gcloudignore` to learn
more).
检查该日志,它说码头工人将使用.gitignore
:
DATE Using default gcloudignore file:
# This file specifies files that are *not* uploaded to Google Cloud Platform
# using gcloud. It follows the same syntax as .gitignore, with the addition of
# "#!include" directives (which insert the entries of the given .gitignore-style
# file at that point).
# ...
.gitignore
因此,我修复了我的问题.gitignore
(我将其用作白名单),然后docker复制了该文件。
[我添加了答案,因为我没有足够的声誉来发表评论]
因此,最近刚发生过几次。作为.Net开发人员,我使用VisualStudio将构建名称从SomeThing
更改Something
为DLL名称,但这不会更改保留的.csproj文件。SomeThing.csproj
Dockerfile使用Linux区分大小写的文件名,因此新自动生成的Dockerfile试图复制Something.csproj
找不到的文件。因此,手动重命名该文件(使其变为小写)即可正常工作
但是...这是一个警告。我的Windows笔记本电脑上的文件名更改未被Git接收,因此回购源仍在SomeThing.csproj
回购中,并且在CI / CD流程中,Docker构建因相同的原因而失败...
我不得不直接更改文件名作为回购协议上的提交。。。
tl; dr如果在Windows O / S上检查文件名是否区分大小写,并注意本地文件重命名不会随着Git更改而被获取,因此请确保在使用CI / CD时也修改了您的仓库
这里已经有一些不错的答案。对我有用的是将注释移至下一行。
坏:
WORKDIR /tmp/app/src # set the working directory (WORKDIR), so we can reference program directly instead of providing the full path.
COPY src/ /tmp/app/src/ # copy the project source code
好:
WORKDIR /tmp/app/src
# set the working directory (WORKDIR), so we can reference program directly instead of providing the full path.
COPY src/ /tmp/app/src/
# copy the project source code