标签: docker-for-windows

在Windows 10中使用Docker for Windows将容器端口暴露给主机

我正在阅读docker API并尝试创建一个简单的容器并公开1个端口.

在我的示例中,我有一个应用程序,它侦听容器内的TCP端口9595,我想从外部世界(即容器的主机)端口访问它9090.

在创建容器我有"ExposedPorts": { "9595/tcp: {}" }"PortBindings": { "9595/tcp": [{ "HostPort": "9090" }] }.

所以,如果我从主机上访问http://container_internal_ip:9595它的工作原理!但是,当我访问时http://localhost:9090,这是我期望使用此端口映射功能,它不起作用...

在跑步的时候,docker port containerID9595/tcp -> 0.0.0.0:9090应该这意味着,when connecting to any IP on the host, at port 9090, forward to the container in port 9595.

那么,这里有什么问题?为什么我不能连接到9090?

我感谢任何澄清.

docker docker-for-windows

14
推荐指数
2
解决办法
8648
查看次数

Windows上的慢速Docker运行步骤,为什么?

我正在尝试使用以下内容创建一个新的docker镜像dockerfile,但是要花费很长时间才能完成其中一个步骤:

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"]
Run Code Online (Sandbox Code Playgroud)

这是迄今为止的输出:

PS C:\MyWorkspace\images\msbuild> docker build -t msbuild . …
Run Code Online (Sandbox Code Playgroud)

docker windows-server-2016 docker-for-windows

14
推荐指数
1
解决办法
1903
查看次数

Docker for windows 在尝试查看设置时挂起

我已经为 Windows 安装了 Docker 桌面(Windows 10 上的 docker 19.0.3)。当我去设置它挂起状态更新并且永远不会回来。

在此处输入图片说明

我试过卸载和安装,但没有帮助。Hyper-V 和容器功能在 Windows 10 中打开。请帮助我知道这到底可能有什么问题?

docker docker-for-windows docker-desktop

14
推荐指数
2
解决办法
3916
查看次数

Docker 化 Windows 服务

我是 Docker 新手,我有一个包含一组 Windows 服务(.NET)的应用程序。我想将它运行到 Docker 容器中。我应该怎么办 ?

containers windows-services docker docker-for-windows

14
推荐指数
2
解决办法
2万
查看次数

如何从windows shell连接到docker VM(MobyLinux)?

是否可以登录主机VM的shell,类似于我们如何轻松地进入运行容器bash?

docker exec -it bash

我不小心打破了一个容器的关键文件,因此它无法启动.不幸的是,该容器将其数据存储在其中.结果是每当我试图运行它时,都无法启动.我看到的唯一解决方案是导航到托管Docker守护程序的文件.但是,我在Windows上运行docker VM,我无法访问VM(MobyLinuxVM)中的文件.

我正在使用Docker for Windows,版本1.12.3-beta30.1(8711)

shell docker docker-for-windows

13
推荐指数
1
解决办法
1万
查看次数

有没有办法通过远程桌面连接到运行中的Windows Server容器?

我想在docker Windows服务器容器(https://hub.docker.com/r/microsoft/windowsservercore/)中运行旧的.NET应用程序。

如果此应用程序不需要UI,一切将变得容易。它的UI做了很多工作,而这些工作无法通过命令行或其他API来完成。

基本上,完美的事情是通过RDP到达此运行容器。

据我了解,它不过是在某个TCP端口(默认端口3389)上运行的服务(TermService)。

但似乎TermService不在Microsoft / windowsservercore容器中运行。

我发现了一篇文章介绍如何激活它:https : //withinrafael.com/2018/03/09/using-remote-desktop-services-in-containers/

基本上,我保留了相同的Dockerfile,只是更改了一些凭据。

#escape=`
FROM microsoft/windowsservercore:1709_KB4074588
RUN net user /add jerome
RUN net user jerome aDifficultPassword
RUN net localgroup "Remote Desktop Users" jerome /add
RUN net localgroup "Administrators" jerome /add
RUN cmd /k reg add "HKLM\System\CurrentControlSet\Control\Terminal Server" /v TemporaryALiC /t REG_DWORD /d 1
Run Code Online (Sandbox Code Playgroud)

我使用以下命令启动容器:

docker run -it -p3389:3389 myimage powershell
Run Code Online (Sandbox Code Playgroud)

当我连接到容器并键入一些powershell命令以列出正在运行的服务时,我可以看到TermService运行良好。这是我用来列出服务的命令。

Get-Service
Run Code Online (Sandbox Code Playgroud)

当我列出打开的TCP端口时,可以看到监听了3389。这是我用来显示打开的端口的命令。

netstat -an
Run Code Online (Sandbox Code Playgroud)

当我尝试通过远程桌面客户端连接到容器时,开始时一切正常。

  • 它要求我提供主机。
  • 然后输入用户名和密码。
  • 如果我输入了错误的凭据,则说“凭据错误”,因此与服务器之间的通信良好。
  • 如果我输入良好的凭据,则什么也不会发生。完全没有错误消息,但也没有显示屏...

我真的不知道日志是否在某处生成。

如果像TigerVNC这样的东西代替RDS,我会好的。我以前从未尝试过此工具,但似乎可以完成这项工作。

您将如何控制Windows容器中运行的GUI应用程序?

remote-desktop rds windows-server docker docker-for-windows

13
推荐指数
1
解决办法
3228
查看次数

在 Windows 2019 服务器上运行 linux 容器时出错

我只是在 Windows 2019 服务器上安装 docker 来运行 linux 容器。

我遵循本指南“在 Windows Server 2019 上运行 Linux 容器”一章。当我尝试运行 bash shell 时,出现以下错误:

docker.exe:注册失败层:未能启动服务工具VM(applydiffe53547ea1d150a4e4afba05378a3a45be5ea769d52fddf03ff25dbd09e43d20d):集装箱e53547ea1d150a4e4afba05378a3a45be5ea769d52fddf03ff25dbd09e43d20d_svm CreateContainer过程中遇到错误:未能在Windows系统调用:因为没有安装所需功能的虚拟机无法启动。

有谁知道缺少什么功能?

更新: 看来问题与程序中的第一个错误有关。运行时:

Get-VM WinContainerHost | Set-VMProcessor -ExposeVirtualizationExtensions $true
Run Code Online (Sandbox Code Playgroud)

它抛出错误:

Get-VM : Hyper-V was unable to find a virtual machine with name "ContainerHost". 
Run Code Online (Sandbox Code Playgroud)

我不相信这是脚本中的指南,因为没有任何命令可以创建这个 WinContainerHost 虚拟机。

解决更令人困惑,有 2 种类型的容器,hyper-v 和服务器容器,如本 指南中所述。我不确定要遵循什么路径。我很失落。

docker docker-for-windows windows-server-2019

13
推荐指数
2
解决办法
4377
查看次数

Docker Desktop for Windows:无法在Windows容器模式下访问公开端口上的服务

我正在使用以下Dockerfiles在运行Docker Desktop for Windows 17.03版的Windows 10桌面上的Windows容器中创建运行Jenkins的容器

FROM microsoft/windowsservercore

RUN powershell -Command wget 'http://javadl.oracle.com/webapps/download/AutoDL?BundleId=210185' -Outfile 'C:\jreinstaller.exe' ; Start-Process -filepath C:\jreinstaller.exe -passthru -wait -argumentlist "/s,INSTALLDIR=c:\Java\jre1.8.0_91" ; del C:\jreinstaller.exe

ENV JAVA_HOME c:\\Java\\jre1.8.0_91  
RUN setx PATH %PATH%;%JAVA_HOME%\bin

CMD [ "java.exe" ]
Run Code Online (Sandbox Code Playgroud)

我从这个docker文件创建图像:

docker build -t windows-java:jre1.8.0_91 .
Run Code Online (Sandbox Code Playgroud)

我用来安装Jenkins的第二个Dockerfile:

FROM windows-java:jre1.8.0_91

ENV HOME /jenkins  
ENV JENKINS_VERSION 2.58  
RUN mkdir \jenkins  
RUN powershell -Command "wget -Uri https://updates.jenkins-ci.org/latest/jenkins.war -UseBasicParsing -OutFile /jenkins/jenkins.war"

EXPOSE 8080  
EXPOSE 50000  

CMD java -jar C:\\jenkins\\jenkins.war


docker build -t jenkins-windows:2.0 . …
Run Code Online (Sandbox Code Playgroud)

docker docker-for-windows docker-desktop

12
推荐指数
3
解决办法
6989
查看次数

Docker Windows版本失败并显示错误:"系统找不到指定的路径"

我尝试在Docker Windows上创建目录连接以创建8.3.但它失败了,下面的错误信息.

D:\data\docker\sample>docker build -t sample .
Sending build context to Docker daemon  1.272GB
Step 1/4 : FROM microsoft/windowsservercore
 ---> 2cddde20d95d
Step 2/4 : RUN fsutil.exe behavior set disable8dot3 0
 ---> Running in ec6e7cc09ec6
The registry state is now: 0 (Enable 8dot3 name creation on all volumes).
 ---> 53805bc21858
Removing intermediate container ec6e7cc09ec6
Step 3/4 : RUN mklink /J "C:\PROGRA~1" "C:\Program Files"
 ---> Running in 2116f2070e6a
Junction created for C:\PROGRA~1 <<===>> C:\Program Files
re-exec error: exit status 1: output: time="2017-10-03T16:15:54+09:00" …
Run Code Online (Sandbox Code Playgroud)

windows docker docker-for-windows

12
推荐指数
1
解决办法
6427
查看次数

Docker Windows 容器无法解析 host.docker.internal

我的 Windows docker 容器无法解析host.docker.internal,但它可以与 Linux 容器一起使用。我更愿意继续使用 Linux 容器,但我在使用旧的 .Net Framework 4.7.2 应用程序时遇到了问题。

我的应用程序连接到本地计算机上的 RabbitMQ。这在 Linux 容器中按预期工作,但在 Windows 容器中它会抛出此错误:

System.Net.Sockets.SocketException:没有这样的主机已知

我尝试过 ping host.docker.internal。

C:\app>ping host.docker.internal Ping 请求找不到主机 host.docker.internal。请检查名称并重试。

这是我的 dockerFile:

FROM mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2019
ARG source
WORKDIR /app
COPY ${source:-SampleApp/obj/Docker/publish} .
ENTRYPOINT ["C:\\app\\SampleApp.exe"]
Run Code Online (Sandbox Code Playgroud)

我使用的是 docker 版本20.10.2和 docker 桌面版本3.1.0
我在 Windows 10 版本 10.0.18363 上运行。

docker docker-container docker-for-windows windows-container docker-desktop

12
推荐指数
1
解决办法
1511
查看次数