我正在阅读docker API并尝试创建一个简单的容器并公开1个端口.
在我的示例中,我有一个应用程序,它侦听容器内的TCP端口9595
,我想从外部世界(即容器的主机)端口访问它9090
.
在创建容器我有"ExposedPorts": { "9595/tcp: {}" }
和"PortBindings": { "9595/tcp": [{ "HostPort": "9090" }] }
.
所以,如果我从主机上访问http://container_internal_ip:9595
它的工作原理!但是,当我访问时http://localhost:9090
,这是我期望使用此端口映射功能,它不起作用...
在跑步的时候,docker port containerID
我9595/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镜像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) 我已经为 Windows 安装了 Docker 桌面(Windows 10 上的 docker 19.0.3)。当我去设置它挂起状态更新并且永远不会回来。
我试过卸载和安装,但没有帮助。Hyper-V 和容器功能在 Windows 10 中打开。请帮助我知道这到底可能有什么问题?
我是 Docker 新手,我有一个包含一组 Windows 服务(.NET)的应用程序。我想将它运行到 Docker 容器中。我应该怎么办 ?
是否可以登录主机VM的shell,类似于我们如何轻松地进入运行容器bash?
docker exec -it bash
我不小心打破了一个容器的关键文件,因此它无法启动.不幸的是,该容器将其数据存储在其中.结果是每当我试图运行它时,都无法启动.我看到的唯一解决方案是导航到托管Docker守护程序的文件.但是,我在Windows上运行docker VM,我无法访问VM(MobyLinuxVM)中的文件.
我正在使用Docker for Windows,版本1.12.3-beta30.1(8711)
我想在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应用程序?
我只是在 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 和服务器容器,如本 指南中所述。我不确定要遵循什么路径。我很失落。
我正在使用以下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 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 容器无法解析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