Docker容器中的Windows服务

时间:2018-11-29 09:45:48

标签: docker windows-services docker-windows

我正在研究应用程序的可能的码头化。该应用程序包括多个Windows服务(.NET WCF)。我尚未尝试为Windows服务创建dockerfile。但是,如果有人可以向我提供一些指示是否可行,将不胜感激。

1 个答案:

答案 0 :(得分:1)

根据您的情况,我可能会为每个Windows服务创建一个映像。

在将Windows服务构建到Docker映像中时,以下Dockerfile对我来说效果很好。

所有服务文件都必须位于docker上下文的“安装”文件夹中,以及InstallUtils.exe文件的副本(来自.NET / Visual Studio)。

# escape=\

FROM mcr.microsoft.com/dotnet/framework/aspnet:4.7.2-windowsservercore-1709

SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]

COPY ["Installs/", "/Service/"]

WORKDIR "C:/Service/"

RUN "C:/Service/InstallUtil.exe" /LogToConsole=true /ShowCallStack SmartFormsToWorkInjuryReportingService.exe; \
    Set-Service -Name "\"My Windows Service Name\"" -StartupType Automatic; \
    Set-ItemProperty "\"Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\My Windows Service Name\"" -Name AllowRemoteConnection -Value 1

ENTRYPOINT ["powershell"]
CMD Start-Service \""My Windows Service Name\""; \
    Get-EventLog -LogName System -After (Get-Date).AddHours(-1) | Format-List ;\
    $idx = (get-eventlog -LogName System -Newest 1).Index; \
    while ($true) \
    {; \
      start-sleep -Seconds 1; \
      $idx2  = (Get-EventLog -LogName System -newest 1).index; \
      get-eventlog -logname system -newest ($idx2 - $idx) |  sort index | Format-List; \
      $idx = $idx2; \
    }

仅供参考,然后您可以通过以下方式运行服务:

docker run --rm --net=MyNet --platform=windows -p 80:80 --name MyWindowsServiceContainer mywindowsserviceimage