目前我正在进行一个项目,在该项目中,我必须对本应在Windows上运行的应用程序进行码头化。它是一个可以通过命令行安装和配置的应用程序。这个问题最终适用于任何申请。
我选择的平台显然是Windows。因此,我选择了一个基本映像mcr.microsoft.com/windows/servercore:1803作为开始。
安装后,我的应用程序将需要一个规则添加到防火墙。因此,我决定测试我是否能够在容器内操作防火墙。这是一次非常有问题的经历。
到目前为止我所做的。
FROM mcr.microsoft.com/windows/servercore:1803
# Add user
RUN net user /add MyUser
RUN net user MyUser ABCdef123!
RUN net localgroup "Administrators" MyUser /add
之后,我测试了是否可以通过调用Get-NetFirewallRule
来查看FW规则。这导致了一个错误:
Get-NetFirewallRule : There are no more endpoints available from the endpoint mapper.
At line:1 char:1
+ Get-NetFirewallRule
+ ~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (MSFT_NetFirewallRule:root/standardcimv2/MSFT_NetFirewallRule) [Get-NetFirewallRule], CimException
+ FullyQualifiedErrorId : Windows System Error 1753,Get-NetFirewallRule
我通过调用Get-Service
检查了当前运行的服务,得到了包含此行的服务列表:Stopped mpssvc Windows Defender Firewall
。看起来FW甚至还没有启动。我决定更深入地挖掘,并检查注册表中的一些线索。调用此cmd REG QUERY HKLMSYSTEMCurrentControlSetservicesMpsSvc /v Start
会给我一个值4,该值为Disabled。所以我试着启用它,将其设置为2,但在之后启动服务时运气不佳
REG ADD HKLMSYSTEMCurrentControlSetservicesMpsSvc /v Start /t REG_DWORD /d 2 /f
net start MpsSvc
结果:
System error 1058 has occurred.
The service cannot be started, either because it is disabled or because it has no enabled devices associated with it.
依赖FW的服务运行良好(BFE、RDC等(它就是不会开始。
聪明人有什么线索吗?提前感谢!
假设您使用的是Windows Server Container,而不是Hyper-V Container,则您有一个共享内核,因此使用主机的防火墙。
来自网络隔离与安全:
根据使用的容器和网络驱动程序,端口ACL由Windows防火墙和VFP的组合强制执行。
Windows Server容器
它们使用Windows主机的防火墙(受网络命名空间启发(以及VFP
默认出站:ALLOW ALL
默认入站:ALLOW ALL(TCP、UDP、ICMP、IGMP(未经请求的网络流量
拒绝所有非来自这些协议的其他网络流量