我今天刚刚下载了适用于Windows 10 64bit的Docker Toolbox。我正在阅读教程。我在尝试使用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.
BTW:我尝试了几个提及@ 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
答案 0 :(得分:123)
:
"docker build -t docker-whale ."
检查当前工作目录中是否存在Dockerfile。
答案 1 :(得分:26)
如果您正在使用Windows 8,那么您将使用Docker工具箱。 从mydockerbuild目录运行以下命令,因为Dockerfile是一个文本文件
docker build -t docker-whale -f ./Dockerfile.txt .
答案 2 :(得分:23)
该错误消息具有误导性。问题实际上与符号链接无关。通常, docker无法找到描述构建的Dockerfile 。
典型原因如下:
Dockerfile
。例如,如果调用了dockerfile
,.Dockerfile
,Dockerfile.txt
或其他名称,则不会找到它。docker build contextdir
,则Dockerfile必须位于contextdir/Dockerfile
。如果您将其放入Dockerfile
中,则找不到它。不仅此错误消息是模糊和令人困惑的。 我通常会发现某些docker概念和许多文档在语义上不精确。
notion of "tag"(截至2019年8月)是一个真正的坏处。根据您在文档中查找的位置,它会说出以下所有内容(或多或少清晰):
tag
命令,但是您提供的参数不称为标签或标签名称,而是称为图像名称。tag
命令参数中,标记名称是可选的,但图像名称是必需的。很明显。docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
x
位于其映像名中(或之前,但总是以某种方式神奇地坚持使用)的映像然后应驻留在该主机x
(在注册表中) )。如果要访问此类图像,则或多或少必须使用带有主机前缀x
的此名称。x
上,因为将图像“推”到x
是一个单独的操作。如果对此感到困惑,那不是你的错。
咆哮结束。
答案 3 :(得分:11)
只需从Dockerfile中删除扩展名.txt,然后运行命令
docker build -t image-name
它肯定会起作用。
答案 4 :(得分:10)
答案 5 :(得分:9)
我已经命名了我的文件dockerfile而不是Dockerfile(大写),一旦我更改了它,它就开始处理我的“Dockerfile”。
答案 6 :(得分:8)
文件名应为import numpy as np
from time import sleep
from time import time
from smbus2 import SMBus
# Helper timing functions
_tstart_stack = []
def tic():
_tstart_stack.append(time())
def toc(fmt="Elapsed: %s s"):
print(fmt % (time() - _tstart_stack.pop()))
# Datasheet: https://www.pololu.com/file/0J1087/LSM6DS33.pdf
# REGISTER DEFINITIONS:
WHO_AM_I = 0x0F # page 46
WHO_AM_I_VAL = 0b01101001
# FIFO registers
FIFO_STATUS1 = 0x3A # page 59
FIFO_STATUS2 = 0x3B # page 60
FIFO_STATUS3 = 0x3C # page 60
FIFO_STATUS4 = 0x3D # page 61
FIFO_CTRL1 = 0x06 # page 40
FIFO_CTRL2 = 0x07 # page 40
FIFO_CTRL3 = 0x08 # page 41
FIFO_CTRL4 = 0x09 # page 42
FIFO_CTRL5 = 0x0A # page 43
FIFO_DATA_OUT_L = 0x3E # page 61
FIFO_DATA_OUT_H = 0x3F # page 61
# Control registers
CTRL1_XL = 0x10 # page 46
CTRL2_G = 0x11 # page 48
CTRL3_C = 0x12 # page 49
CTRL4_C = 0x13 # page 50
CTRL5_C = 0x14 # page 50
CTRL6_C = 0x15 # page 51
CTRL7_G = 0x16 # page 52
CTRL8_XL = 0x17 # page 52
CTRL9_XL = 0x18 # page 53
CTRL10_C = 0x19 # page 54
TAP_CFG = 0x58 # page 64
WAKE_UP_DUR = 0x5C # page 66
# Accelerometer read
OUTX_L_XL = 0x28 # page 58
OUTX_H_XL = 0x29 # page 58
OUTY_L_XL = 0x2A # page 58
OUTY_H_XL = 0x2B # page 59
OUTY_L_XL = 0x2C # page 59
OUTY_H_XL = 0x2D # page 59
# Gyro read
OUTX_L_G = 0x22 # page 56
OUTX_H_G = 0x23 # page 57
OUTY_L_G = 0x24 # page 57
OUTY_H_G = 0x25 # page 57
OUTY_L_G = 0x26 # page 58
OUTY_H_G = 0x27 # page 58
# BIT DEFINITION MASKS
FIFO_THRESHOLD = 0b10000000 # FTH in FIFO_STATUS2, 1 when threshold is crossed.
FIFO_OVER_RUN = 0b01000000 # FIFO FULL + 1 sample
FIFO_FULL = 0b00100000 # in FIFO_STATUS2, FIFO full on next sample
FIFO_EMPTY = 0b00010000 # in FIFO_STATUS2
def init(BUS, LSM):
# LSM6DS33 datasheet, page 46-54
# 104 Hz (high performance), 2g accelerometer full-scale selection, 50Hz anti-aliasing filter bandwidth selection
BUS.write_byte_data(LSM, CTRL1_XL, 0b01000011)
# 104 Hz (high performance), 245 dps (degrees per second), full scale disabled
BUS.write_byte_data(LSM, CTRL2_G, 0b01000000)
# BDU enabled, auto increment address on multiple byte access.
BUS.write_byte_data(LSM, CTRL3_C, 0b01000100)
# high pass filter gyroscope enabled
BUS.write_byte_data(LSM, CTRL7_G, 0b01000000)
# low pass filter accelerometer enabled and xyz gyro enable
BUS.write_byte_data(LSM, CTRL10_C, 0b00111100)
# threshold on 2016 samples
BUS.write_byte_data(LSM, FIFO_CTRL1, 0b11100000)
# Time stamp enable, FIFO on data ready, threshold on 2016 samples
BUS.write_byte_data(LSM, FIFO_CTRL2, 0b10000111)
# No decimation (downsampling) for gyro and acc
BUS.write_byte_data(LSM, FIFO_CTRL3, 0b00001001)
# No decimation (downsampling) for timer
BUS.write_byte_data(LSM, FIFO_CTRL4, 0b00001000)
# FIFO ODR 104Hz, FIFO continous mode
BUS.write_byte_data(LSM, FIFO_CTRL5, 0b00100110)
BUS.write_byte_data(LSM, TAP_CFG, 0b10000000) # Timer enable
BUS.write_byte_data(LSM, WAKE_UP_DUR, 0b00000000) # Timer resolution 6.4ms
def who_am_i(BUS, LSM):
# whoami identification
return BUS.read_byte_data(LSM, WHO_AM_I) == WHO_AM_I_VAL
def wait_data_ready(BUS, LSM):
# Check Accelerometer Data Ready
while True: # while data not ready
status = BUS.read_byte_data(LSM, 0x1E)
if status & 0x01 == 1:
return 1
def reset_timer(BUS, LSM):
BUS.write_byte_data(LSM, 0x42, 0xAA) # TIMESTAMP2_REG Write 0xAA to reset.
def reset_fifo(BUS, LSM):
current_settings = BUS.read_byte_data(LSM, FIFO_CTRL5)
bypassmode = 0b01111000 & current_settings
BUS.write_byte_data(LSM, FIFO_CTRL5, bypassmode) # FIFO bypass mode
sleep(0.1)
BUS.write_byte_data(LSM, FIFO_CTRL5, current_settings) # Back to normal
def read_fifo(BUS, LSM):
while 1:
data = []
# Read the two FIFO STATUS registers, addr is device I2C address
status_regs = BUS.read_i2c_block_data(LSM, FIFO_STATUS1, 2)
# Get the current number of samples in FIFO queue
if FIFO_FULL & status_regs[1]:
n_samp = 4095
else:
n_samp = (status_regs[1] & 0b00001111)*256 + status_regs[0]
if FIFO_EMPTY & status_regs[1]:
print("FIFO EMPTY!")
# THIS PRINT STATEMENT SPEEDS UP THE FOR LOOP BELOW
# print("number of samples ", n_samp)
if FIFO_THRESHOLD & status_regs[1]:
tic()
# Threshold: 2016 samples=4032bytes=126 reads of 32 bytes
for _ in range(126):
data.extend(BUS.read_i2c_block_data(LSM, FIFO_DATA_OUT_L, 32))
toc()
status_regs = BUS.read_i2c_block_data(LSM, FIFO_STATUS1, 2)
n_samp = (status_regs[1] & 0b00001111)*256 + status_regs[0]
print("number of samples after read", n_samp)
if __name__ == "__main__":
# I2C bus and register
BUS = SMBus(1)
LSM = 0x6b # 3-axis gyroscope and 3-axis accelerometer
print("Whoami: ", who_am_i(BUS, LSM))
init(BUS, LSM)
reset_fifo(BUS, LSM)
reset_timer(BUS, LSM)
read_fifo(BUS, LSM)
,而不是Dockerfile
。 该文件不应具有任何扩展名。
答案 7 :(得分:8)
虽然我使用了正确的命令来创建图像,但我有这个错误(在MacBook中),
docker build -t testimg .
后来我发现路径就是问题所在。只需导航到包含docker文件的正确路径即可。只需仔细检查您当前的工作目录。没什么可惊慌的!
答案 8 :(得分:4)
我已经通过VS2017 Docker支持工具创建了DockerFile,并且遇到了相同的错误。一段时间后,我意识到我不在包含Dockerfile (~\source\repos\DockerWebApplication\)
的正确目录中。将其安装到项目内部的正确文件(~/source/repos/DockerWebApplication/DockerWebApplication)
中,并成功创建了docker映像。
答案 9 :(得分:3)
那只是因为记事本添加" .txt"在Dockerfile的末尾
答案 10 :(得分:3)
在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确实没有完全实现systemctl。完成Windows Docker CE安装并设置环境变量后,docker就可以在WSL / Ubuntu下正常工作。
答案 11 :(得分:2)
在Windows 10中...句点是第一个参数
docker build . -t docker-whale
答案 12 :(得分:2)
我最初在PowerShell中创建了我的Dockerfile,虽然我没有看到它显示为PS文件类型的文件的扩展名...一旦我从Notepad ++创建文件,一定要选择&#34 ;所有类型(。)"文件名(Dockerfile)上没有扩展名的文件类型。这使我的图像构建命令成功完成....只需确保你的Dockerfile有一个"文件" ...
的类型答案 13 :(得分:2)
以下命令对我有用 docker build -t docker-whale -f Dockerfile.txt。
答案 14 :(得分:2)
问题是文件名应该是Dockerfile而不是DockerFile或dockerfile它应该是D大写,然后是小写的ockerfile请注意
答案 15 :(得分:1)
最重要的是,如果您使用其他名称,请确保您的文件名是Dockerfile
(至少对我而言不起作用)。
如果您在使用Dockerfile的目录中也使用.
,即
docker build -t Myubuntu1:v1 .
或使用绝对路径,即
docker build -t Myubuntu1:v1 /Users/<username>/Desktop/Docker
答案 16 :(得分:1)
构建Dockerfile保存Dockerfile中的自动内容。不是Dockerfile,因为在打开文件命令时:
$ notepad Dockerfile
(写入文本文件,因此无法构建文件)
构建文件运行:
$ notepad Dockerfile
现在运行:
$ docker build -t docker-whale .
确保您位于Dockerfile的当前目录中。
答案 17 :(得分:1)
我是我的情况(从Windows 10运行)
1)将文件myDockerFile.Dockerfile
重命名为Dockerfile
(无文件扩展名)。
然后在该命令外的文件夹中来自:
docker build .\Docker-LocalNifi\
这对我和我在工作的同事都有效,希望对您也有用
答案 18 :(得分:1)
确保文件名“ Dockerfile”未保存任何扩展名。 只需创建一个没有任何扩展名的文件即可。
并确保Dockerfile与尝试构建Docker映像的目录位于同一目录中。
答案 19 :(得分:1)
该错误表示docker build
正在使用错误输入的PATH | URL
或在当前目录中找不到Dockerfile
。另外,请确保从集成终端(例如,IDE或文本编辑器内的bash
)运行命令时,您具有执行此操作的管理员权限。
最好是,您可以使用PATH
从终端检查pwd
(如果在Windows上使用简单的bash shell
,则可以在dir
或cli
中进行检查并复制确切路径您要在其中构建图像的位置。
docker build C:\windows\your_amazing_directory
docker build --help
还将向您显示在格式错误或非法命令时可用的选项。
答案 20 :(得分:0)
确保您的DOCKERfile
在应用程序目录的根目录中,我在src中拥有我的名字,导致此错误,因为Docker找不到DOCKERfile
的路径
答案 21 :(得分:0)
在 Linux 中,文件夹区分大小写。我收到此错误是因为文件夹名称为 TestAPI 并且正在放置 TestApi。
答案 22 :(得分:0)
确保您运行命令
docker build . -t docker-whale
来自具有dockerfile的目录
答案 23 :(得分:0)
请检查docker是否在您的Windows上运行,我尝试找到解决方案,然后不小心检查并找到问题
答案 24 :(得分:0)
如果您已将第二个驱动器作为“已安装的卷”安装到NTFS文件夹中,则会出现此问题。
将文件移动到已安装卷之外的驱动器位置。
答案 25 :(得分:0)
我也面临同样的问题,当我创建以DockerFile命名的文件并提及所有要在创建任何映像时执行的命令时,该问题便得到解决。
答案 26 :(得分:0)
在项目目录中执行docker build -t getting-started .
,并确保Dockerfile存在并且没有.txt
扩展名。
如果您使用的是Windows,请在以下位置的“查看”标签下检查“文件扩展名”
文件资源管理器以显示.txt是否存在,如果前一个为true,则将其删除。
祝你好运。
答案 27 :(得分:0)
我在工作目录中错误创建了 Dockerfile.txt
,导致在build
解决方法是从文件中删除.txt
扩展名。
文件名只能为 Dockerfile
,没有任何扩展名。
答案 28 :(得分:0)
问题与DockerFile创建过程有关。
为了工作,请打开cmd,cd到感兴趣的目录并输入:
abc>DockerFile
这将在文件夹内创建一个名为DockerFile的文件。
现在输入:
notepad DockerFile
这将在记事本中打开DockerFile文件,您将不得不复制/粘贴提供的标准代码。
保存文件,现在,最后,使用Docker输入以下内容构建映像:
docker build -t docker-whale .
这对我有用,希望对其他人有帮助
答案 29 :(得分:0)
构建dockerfile的两种方法:
您可以决定不指定要从其生成文件的名称,而仅通过指定路径来生成文件(以这种方式执行,文件名必须为Dockerfile
,且未附加扩展名,例如:{{1} }
或
您可以使用docker build -t docker-whale:tag path/to/file/
指定文件,而决定使用什么扩展名(由于-f
,.txt
,.dockerfile
等)。 ,例如.Dockerfile
。
答案 30 :(得分:0)
当我在工作的路径位于Junction目录下时,我在Windows上得到了这个。所以我的修复是不能在那条路上工作。
答案 31 :(得分:0)
在Mac上它适用于以下命令。 (希望你的.Dockerfile
在你的根目录中。)
docker build -t docker-whale -f .Dockerfile .
答案 32 :(得分:-1)
要在Windows / Linux中从命令行构建映像。 1.在当前目录中创建一个docker文件。 例如:FROM ubuntu 运行apt更新 运行apt-get -y install apache2 添加。 / var / www / html ENTRYPOINT apachectl -D FOREGROUND ENV名称Devops_Docker 2.不要以.txt扩展名保存。 3.在命令行下运行命令 码头工人建设。 -t apache2image
答案 33 :(得分:-1)
我试过这个并且有效:
$ docker build -t test_dotnet_image
"C:\Users\ssundarababu\Documents\Docker\Learn\SimpleDockerfile"
请参阅foldername周围的引号+取消引号。
注意:在文件夹"C:\Users\ssundarababu\Documents\Docker\Learn\SimpleDockerfile"
中,我有我的Dockerfile。