docker - Windows 上运行缓慢的 Docker 步骤,为什么?

标签 docker windows-server-2016 docker-for-windows

我正在尝试使用以下 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

什么会导致一个简单的下载步骤永远耗时?

最佳答案

我在使用 Docker 和 Windows 时遇到过类似的问题。尝试了以下选项:

  1. 检查 DNS 是否太慢。我用 8.8.8.8 替换了 /etc/resolve.conf 中的几个名称服务器条目,并进行了强制重新加载。这有助于减少加载时间。

  2. 检查 docker 是否通过 IPv6 连接到 dockerd;在我的情况下,这不是听众。在网络接口(interface)上禁用 IPv6 并重新启动机器有助于减少加载时间。

关于docker - Windows 上运行缓慢的 Docker 步骤,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46653629/

相关文章:

amazon-web-services - 如何在 AWS Windows Server 环境中运行 Docker?

docker - 使用 GitHub 操作构建 Docker 镜像 : No such file or directory

docker - Windows 容器中的控制台应用程序或 Windows 服务?

c# - 使用 Microsoft.Office.Interop.Excel 打开 excel 文件的应用程序与服务器上的 RDP session 冲突

docker - 来自守护程序的错误响应:挂载被拒绝-运行昨晚正在运行的docker应用程序时出错

docker无法使用系统代理

python - 如何在alpine容器中安装python2.6?

java - 将 Docker 镜像作为容器运行(适用于 Windows 用户)

linux - 如何在 Windows Server 2016 上运行 Linux Docker 镜像?

asp.net - 如何在Docker dotnet框架镜像上使用dotnet核心