我正在尝试在基于Windows 2016 Nano Server的docker容器中运行Perl脚本。为此,我使用的是ActivePerl 5.24。
现在我遇到了一个有趣的问题,其中system()调用在我的2016 Server主机和2016 Nano Server容器中的行为不同。
#!/usr/bin/perl
use strict;
use warnings;
my $status = system('perl.exe -c test.plx');
print "Return: " . $status . "\n";
print "Exit: " . ($status >> 8) . "\n";
print "Signal: " . ($status & 127) . "\n";
print "Message: $!\n";
在主机Windows 2016 Server上,它可以按预期工作:
c:\>perl test.plx
test.plx syntax OK
Return: 0
Exit: 0
Signal: 0
Message:
在我的Docker容器中的Nano服务器上,它看起来像这样:
C:\>perl test.plx
Return: 768
Exit: 3
Signal: 0
Message:
因此,您可以看到输出丢失并且返回码不是0。
如果我现在按回车键。
C:\>
C:\>test.plx syntax OK
因此,看来system()不在等待并返回768(无论如何)
我也尝试使用“ ping -v”代替“ perl -c”,但是发生了相同的事情,因此它必须与system()实现有关。
有人知道为什么相同的调用在docker容器中的行为完全不同吗,我该怎么做才能使system()等待?
更新: 我确认当我使用microsoft / windowsservercore作为基本映像时它可以工作。因此,这里发生的一切似乎都是Nano服务器特有的。
答案 0 :(得分:0)
ActiveState支持人员对此问题给予了答复。
Nano服务器不支持标准的ActiveState构建。 Nano缺少太多组件。如果您有兴趣追求定制版本,我可以将您与我们的销售团队联系起来,他们可以描述我们的企业级产品。
因此,似乎我想坚持使用Nano服务器,要么必须等到有人决定将其实施到标准版本中,要么我需要切换到其他Perl发行版。
在此之前,我将使用有效的服务器核心。