我正在尝试用下面的dockerfile创建一个新的docker镜像,但完成其中一个步骤需要很长时间:
FROM microsoft/dotnet-framework:4.7
SHELL ["powershell"]
# Note: Get MSBuild 12.
RUN Invoke-WebRequest "https://download.microsoft.com/download/9/B/B/9BB1309E-1A8F-4A47-A6C5-ECF76672A3B3/BuildTools_Full.exe" -OutFile "$env:TEMP\BuildTools_Full.exe" -UseBasicParsing
RUN & "$env:TEMP\BuildTools_Full.exe" /Silent /Full
# Todo: delete the BuildTools_Full.exe file in this layer
# Note: Add .NET
## RUN Install-WindowsFeature NET-Framework-45-Features ; \
# Note: Add NuGet
RUN Invoke-WebRequest "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe" -OutFile "C:\windows\nuget.exe" -UseBasicParsing
WORKDIR "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0"
# Note: Add Msbuild to path
RUN setx PATH '%PATH%;C:\\Program Files (x86)\\MSBuild\\12.0\\Bin\\msbuild.exe'
CMD ["C:\\Program Files (x86)\\MSBuild\\12.0\\Bin\\msbuild.exe"]以下是到目前为止的输出:
PS C:\MyWorkspace\images\msbuild> docker build -t msbuild .
Sending build context to Docker daemon 2.56kB
Step 1/9 : FROM microsoft/dotnet-framework:4.7
---> 91abbfdc50cb
Step 2/9 : MAINTAINER mohamed.elkammar@gmail.com
---> Using cache
---> fbf720101007
Step 3/9 : SHELL powershell
---> Using cache
---> 642cf0e08730
Step 4/9 : RUN Invoke-WebRequest "https://download.microsoft.com/download/9/B/B/9BB1309E-1A8F-4A47-A6C5-ECF76672A3B3/BuildTools_Full.exe" -OutFile "$env:TEMP\BuildTools_Full.exe" -UseBasicParsing
---> Using cache
---> a722c88fee0f
Step 5/9 : RUN & "$env:TEMP\BuildTools_Full.exe" /Silent /Full
---> Using cache
---> 4fda7448f2e4
Step 6/9 : RUN Invoke-WebRequest "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe" -OutFile "C:\windows\nuget.exe" -UseBasicParsing
---> Running in eec036874574此外,下面是docker info的输出
C:\Windows\system32>docker info
Containers: 2
Running: 1
Paused: 0
Stopped: 1
Images: 5
Server Version: 17.06.1-ee-2
Storage Driver: windowsfilter
Windows:
Logging Driver: json-file
Plugins:
Volume: local
Network: l2bridge l2tunnel nat null overlay transparent
Log: awslogs etwlogs fluentd json-file logentries splunk syslog
Swarm: inactive
Default Isolation: process
Kernel Version: 10.0 14393 (14393.1715.amd64fre.rs1_release_inmarket.170906-1810)
Operating System: Windows Server 2016 Datacenter
OSType: windows
Architecture: x86_64
CPUs: 1
Total Memory: 4.75GiB
Name: instance-1
ID: B2BG:6AW5:Y32S:YLIO:FE25:WWDO:ZAGQ:CZ3M:S5XM:LSHB:U5GM:VYEM
Docker Root Dir: C:\ProgramData\docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false什么会导致一个简单的下载步骤永远花费时间?
发布于 2019-08-25 01:47:49
我在Docker和Windows上也遇到过类似的问题。已尝试以下选项:
/etc/resolve.conf中的几个名称服务器条目,并进行了强制重新加载。这有助于减少加载时间。docker是否通过IPv6连接到dockerd;在我的例子中,它不是侦听器。在网络接口上禁用IPv6并重新启动计算机有助于减少加载时间。发布于 2019-05-22 09:17:28
与运行容器相比,docker构建过程需要更长的时间。它还取决于docker是否已缓存。
因此,通常在第一次构建容器时,当没有缓存时,它花费的时间最长,然后后续docker构建,Docker引擎将使用其缓存。当你运行一个容器时,一旦构建它就会更快。
当你构建的时候,特别是第一次,docker会从公共注册表中拉出microsoft/dotnet-framework:4.7,除非已经拉出了一个副本,并且在docker镜像中本地可用。如果是,Docker引擎将使用它,如果不是,它将从远程存储库放置它。如果你有一个本地副本,它会更快。如果你愿意,你可以在构建之前把它拉出来,或者把它放在一个本地的私有注册表中,然后把你的标签改成你的注册表url。
到底哪一步是慢的?最后一个是从哪里得到nuget.exe的?如果是这样,首先想到的可能是名称解析、DNS、防火墙或到达互联网的网络超时。
尝试运行此容器以检查名称解析,并查看它是否可以快速获取该文件。
FROM centos维护者Blake Russo
运行yum install -y dig -x -utils nc;dig -x dist.nuget.org;nslookup dist.nuget.org;wget -x ls -la nug*;
https://stackoverflow.com/questions/46653629
复制相似问题