我今天刚刚下载了 Docker Toolbox for Windows 10 64bit。我正在阅读教程。尝试使用 Dockerfile 构建映像时收到以下错误。
脚步:
启动 Docker 快速入门终端。
创建后的testdocker。
按照“构建您自己的映像”Web 链接中的说明准备 Dockerfile
在命令下方运行
docker build -t docker-whale .
Error: $ docker build -t docker-whale .
unable to prepare context: unable to evaluate symlinks in Dockerfile path: GetFileAttributesEx C:\Users\Villanueva\Test\testdocker\Dockerfile: The system cannot find the file specified.
顺便说一句:我尝试了@https://github.com/docker/docker/issues/14339提到的几个选项
$ docker info
Containers: 4
Running: 0
Paused: 0
Stopped: 4
Images: 2
Server Version: 1.10.1
Storage Driver: aufs
Root Dir: /mnt/sda1/var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 20
Dirperm1 Supported: true
Execution Driver: native-0.2
Logging Driver: json-file
Plugins:
Volume: local
Network: bridge null host
Kernel Version: 4.1.17-boot2docker
Operating System: Boot2Docker 1.10.1 (TCL 6.4.1); master : b03e158 - Thu Feb 11 22:34:01 UTC 2016
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 996.2 MiB
Name: default
ID: C7DS:CIAJ:FTSN:PCGD:ZW25:MQNG:H3HK:KRJL:G6FC:VPRW:SEWW:KP7B
Debug mode (server): true
File Descriptors: 32
Goroutines: 44
System Time: 2016-02-19T17:37:37.706076803Z
EventsListeners: 0
Init SHA1:
Init Path: /usr/local/bin/docker
Docker Root Dir: /mnt/sda1/var/lib/docker
Labels:
provider=virtualbox
docker build -t XXX --file ./Dockefile
可能是因为文件名错误,它缺少 R。
在执行以下命令时:
docker build -t docker-whale .
检查 Dockerfile 是否存在于您当前的工作目录中。
错误消息具有误导性。这个问题实际上与符号链接无关。通常只是 docker 找不到描述构建的 Dockerfile。
典型的原因有这些:
Dockerfile 名称错误。它必须称为 Dockerfile。如果它被调用,例如,dockerfile、.Dockerfile、Dockerfile.txt 或其他,它将找不到。
Dockerfile 不在上下文中。如果你说 docker build contextdir,Dockerfile 必须在 contextdir/Dockerfile。如果您将它放在 ./Dockerfile 中,则不会找到它。
Dockerfile 根本不存在。听起来很傻?好吧,在我编写了一个不错的 Dockerfile 之后,我从 GitLab CI 收到了上述错误消息,但忘记签入它。傻吗?当然。不太可能?不。
Dockerfile
Dockefile
肯定与 Dockerfile
不同 :facepalm: 由于使用 docker build -f <tab-completed filename> .
构建工作,我仔细观察并意识到我输入错误了。
如果您在 Windows 8 上工作,您将使用 Docker 工具箱。从 mydockerbuild 目录运行以下命令,因为您的 Dockerfile 是一个文本文件
docker build -t docker-whale -f ./Dockerfile.txt .
docker build -t friendlyhello -f ./Dockerfile.txt .
文件名应为 Dockerfile
而不是 .Dockerfile
。 文件不应有任何扩展名。
确保您已移至 Dockerfile 所在的目录。确保您的 Dockerfile 没有扩展名。也就是说,不是 Dockerfile.txt、Dockerfile.rtf 或任何其他文件。确保您命名为 Dockerfile,而不是 DockerFile、dockerfile 或任何其他名称。
Dockerfile
而不是 DockerFile
有很大帮助
我将我的文件命名为 dockerfile 而不是 Dockerfile(大写),一旦我改变了它,它就开始处理我的“Dockerfile”。
只需从 Dockerfile 中删除扩展名 .txt 并运行命令
docker build -t image-name
它肯定会起作用。
尽管我使用了正确的命令来创建图像,但我遇到了这个错误(在 MacBook 中),
docker build -t testimg .
后来我发现路径是问题。只需导航到包含 docker 文件的正确路径即可。只需仔细检查您当前的工作目录。没什么可惊慌的!
那是因为记事本在 Dockerfile 末尾添加了“.txt”
在 WSL 中,路径转换似乎存在问题。 Dockerfile 在 Ubuntu 中的位置(我正在运行 docker 和 Dockerfile 所在的位置)是“/home/sxw455/App1”,但是这些命令都不起作用:
$ pwd
/home/sxw455/App1
$ ll
total 4
drwxrwxrwx 0 sxw455 sxw455 4096 Dec 11 19:28 ./
drwxr-xr-x 0 sxw455 sxw455 4096 Dec 11 19:25 ../
-rwxrwxrwx 1 sxw455 sxw455 531 Dec 11 19:26 Dockerfile*
-rwxrwxrwx 1 sxw455 sxw455 666 Dec 11 19:28 app.py*
-rwxrwxrwx 1 sxw455 sxw455 12 Dec 11 19:27 requirements.txt*
$ docker build -t friendlyhello .
unable to prepare context: unable to evaluate symlinks in Dockerfile path: GetFileAttributesEx C:\Windows\System32\Dockerfile: The system cannot find the file specified.
$ docker build -t friendlyhello "/home/sxw455/App1"
unable to prepare context: path "/home/sxw455/App1" not found
但在 Windows 中,实际路径是:
C:\Users\sxw455\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs\home\sxw455\App1
所以我必须这样做(即使我是从 bash 运行的):
$ docker build -t friendlyhello
"C:\Users\sxw455\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs\home\sxw455\App1"
Sending build context to Docker daemon 5.12kB
Step 1/7 : FROM python:2.7-slim
---> 0dc3d8d47241
Step 2/7 : WORKDIR /app
---> Using cache
---> f739aa02ce04
Step 3/7 : COPY . /app
---> Using cache
---> 88686c524ae9
Step 4/7 : RUN pip install --trusted-host pypi.python.org -r requirements.txt
---> Using cache
---> b95f02b14f78
Step 5/7 : EXPOSE 80
---> Using cache
---> 0924dbc3f695
Step 6/7 : ENV NAME World
---> Using cache
---> 85c145785b87
Step 7/7 : CMD ["python", "app.py"]
---> Using cache
---> c2e43b7f0d4a
Successfully built c2e43b7f0d4a
Successfully tagged friendlyhello:latest
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.
在初始安装期间,我在环境变量方面遇到了类似的问题,并遵循了一些建议,即安装 Windows DockerCE 并破解环境变量而不是安装 Ubuntu DockerCE,因为(我希望我没记错)WSL 没有完全实现系统控制。一旦完成 Windows Docker CE 安装并设置环境变量,docker 就可以在 WSL/Ubuntu 下正常工作。
我通过 VS2017 Docker 支持工具创建了我的 DockerFile,并且遇到了同样的错误。过了一会儿,我意识到我不在包含 Dockerfile (~\source\repos\DockerWebApplication\)
的正确目录中。 cd 到项目内的正确文件 (~/source/repos/DockerWebApplication/DockerWebApplication)
并成功创建了 docker 映像。
这个命令对我有用:
docker build -t docker-whale -f Dockerfile.txt .
构建 dockerfile 的两种方法:
您可以决定不指定要构建的文件名,而只是指定路径来构建它(这样做,文件名必须为 Dockerfile
且不附加扩展名,例如:docker build -t docker-whale:tag path/to/Dockerfile
或者
您可以使用 -f
指定一个文件,而您决定使用什么扩展名(在 .txt
、.dockerfile
、.Dockerfile
等原因内)并不重要,例如 docker build -t docker-whale:tag /path/to/file -f docker-whale.dockerfile
。
在 Windows 10 中,句点是第一个参数
docker build . -t docker-whale
docker build -t docker-whale .
是有效命令
我最初是在 PowerShell 中创建我的 Dockerfile,虽然我没有在文件上看到扩展名,但它显示为 PS 文件类型……一旦我从 Notepad++ 创建了文件,请确保选择“所有类型 (.)”文件在文件名 (Dockerfile) 上键入不带扩展名的类型。这使我的图像构建命令能够成功完成......只需确保您的 Dockerfile 具有“文件”类型......
问题是文件名应该是 Dockerfile 而不是 DockerFile 或 dockerfile 它应该是 D 大写,后跟小写的 ockerfile 请注意
确保您的 DOCKERfile
位于应用程序目录的根目录中,我在 src 中有我的,导致此错误,因为 Docker 未找到 DOCKERfile
的路径
该错误表示 docker build
使用了输入错误的 PATH | URL
,或者在当前目录中找不到 Dockerfile
。此外,请确保在从集成终端(例如 IDE 或文本编辑器中的 bash
)运行命令时,您具有执行此操作的管理员权限。如果您可以使用 pwd
从终端检查 PATH
(如果在 Windows 上使用简单的 cli
,则在 bash shell
或 dir
中)并复制您想要构建图像的确切路径,这是最好的。
docker build C:\windows\your_amazing_directory
docker build --help
还将向您显示在出现格式错误或非法命令时可用的选项。
构建 Dockerfile 将自动化内容保存在 Dockerfile 中。不是 Dockerfile,因为在打开文件命令时:
$ notepad Dockerfile
(已写入文本文件,因此无法构建文件)
要构建文件运行:
$ notepad Dockerfile
现在运行:
$ docker build -t docker-whale .
确保您位于 Dockerfile 的当前目录中。
最重要的是确保您的文件名是 Dockerfile
,如果您使用其他名称,它将不起作用(至少它不适合我。)
此外,如果您位于 Dockerfile 所在的同一目录中,请使用 .
即 docker build -t Myubuntu1:v1 .
或使用绝对路径,即 docker build -t Myubuntu1:v1 /Users/<username>/Desktop/Docker
我的情况(从 Windows 10 运行)
1) 将文件 myDockerFile.Dockerfile
重命名为 Dockerfile
(不带文件扩展名)。
然后运行 from在文件夹之外这个命令:
docker build .\Docker-LocalNifi\
这对我和我的同事都有效,希望对你也有效
确保文件名“Dockerfile”未使用任何扩展名保存。只需创建一个没有任何扩展名的文件。
并确保 Dockerfile 与您尝试构建 docker 映像的目录位于同一目录中。
如果我们的环境中有多个 docker 文件,那么 Dockerfile 将无法满足我们的要求。
docker build -t ihub -f Dockerfile.ihub .
所以使用 file
(-f 参数)命令来指定你的 docker 文件(Dockerfile.ihub)
.
(点)。
docker build
的文档在这里:docs.docker.com/engine/reference/commandline/build
当我工作的路径位于 Junction 目录下时,我在 Windows 上得到了这个。所以我的解决方法是不在该路径下工作。
在 Mac 上 它适用于以下命令。 (希望您的 .Dockerfile
在您的根目录中)。
docker build -t docker-whale -f .Dockerfile .
该问题与 DockerFile 创建过程有关。
为了工作,打开 cmd,cd 到感兴趣的目录并输入:
abc>DockerFile
这将在您的文件夹中创建一个名为 DockerFile 的文件。
现在输入:
notepad DockerFile
这将在记事本中打开 DockerFile 文件,您必须复制/粘贴提供的标准代码。
保存文件,现在,最后,使用 Docker 输入构建您的图像:
docker build -t docker-whale .
这对我有用,我希望它可以帮助其他人
我在工作目录中错误地创建了 Dockerfile.txt
,导致出现上述错误,而 build
解决方法是从文件中删除 .txt
扩展名。
文件名应仅Dockerfile
不带任何扩展名。
在您的项目目录中执行 docker build -t getting-started .
并确保 Dockerfile 存在并且没有 .txt
扩展名。如果您使用的是 Windows,请检查文件资源管理器中视图选项卡下的“文件扩展名”以显示 .txt 是否存在,如果前者为真,则将其删除。祝你好运。
我也遇到了同样的问题,当我创建用 DockerFile 命名的文件并提到了在创建任何图像时想要执行的所有命令时,它得到了解决。
如果您已将第二个驱动器作为“已安装卷”安装到 NTFS 文件夹,那么您可能会遇到此问题。
将您的文件移动到已安装卷之外的驱动器位置。
不定期副业成功案例分享
f
标志显式编写 Dockerfile 名称,如docker build -f Dockerfile-dev.yaml -t my_container .
中所示,如果您的项目中有多个 Dockerfile,例如每个环境一个,这可能会很有用。这同样适用于 docker-compose。将它们放在不同的子目录中将不起作用,因为上下文 (.
) 将不匹配。