如何重新启动Windows容器

问题描述 投票:5回答:2

我正在尝试从Windows容器运行传统的ASP.Net(.Net 4.7.1)应用程序。其中一个要求是将系统区域性,区域设置和位置设置为en-GB。如果绝对需要,我不允许触摸代码,只允许触摸web.config。

考虑以下方法:

  1. 创建包含所有证书的基础映像,并应用文化设置(需要重新启动)
  2. 重启基本映像(使用Windows重启或容器重启,无论什么工作)
  3. 运行基本映像以确保正确应用区域性设置
  4. 保存基本图像
  5. 使用先前生成的基本图像创建包含我的应用程序的新图像

我的基本图像的Dockerfile是:

FROM mcr.microsoft.com/dotnet/framework/aspnet:4.7.2
ARG site_root=.
WORKDIR /scripts
COPY scripts/ .

RUN powershell -f install-certificates.ps1

RUN powershell C:/Windows/System32/inetsrv/appcmd.exe set config /commit:WEBROOT /section:globalization /culture:en-GB
RUN powershell C:/Windows/System32/inetsrv/appcmd.exe set config /commit:WEBROOT /section:globalization /uiCulture:en-GB

RUN powershell Set-Culture en-GB
RUN powershell Set-WinSystemLocale en-GB
RUN powershell Set-WinHomeLocation -GeoId 242
RUN powershell Set-WinUserLanguageList en-GB -Force

然后构建并运行容器。

docker build -t tmpaspnet .
docker run -it --name tmpcontainer --entrypoint powershell tmpaspnet
# inside the container
Restart-Computer
# container will exit, wait a few seconds
docker start tmpcontainer
docker exec tmpcontainer powershell Get-WinSystemLocale
# verify if system locale is correct set
# commit changes and save them to a new image
docker commit -m 'set system locale to en-GB' tmpcontainer myrepo/aspnet:latest

不幸的是,容器要么忽略了重启并没有完全成功。当我在容器内运行Get-WinSystemLocale时,“en-US”总是返回。

TL,DR:重启Windows容器的正确方法是什么?

我正在使用以下容器mcr.microsoft.com/dotnet/framework/aspnet:4.7.2

设置语言包https://github.com/sanguedemonstro/docker-playground/blob/master/langpack-on-servercore2019.md时有关失败的其他说明

谢谢

docker docker-for-windows windows-container
2个回答
2
投票

你真的不应该在容器内使用Restart-Computer

如果需要重新启动它,甚至不需要在容器内生成shell。

首先,您需要找到您的容器ID。要查找容器,您可以使用主机终端的docker ps command

当你有容器ID时,只需运行docker restart {containerId} command即可。


要更改文化,您可以在网络中使用全球化标签,配置如此。

<system.web>
    <globalization culture="en-GB" uiCulture="en-GB" />
</system.web>

1
投票

如果你使用的是powershell,你可以试试this solution,它应该安全地重启Windows容器。

© www.soinside.com 2019 - 2024. All rights reserved.