Perl system()不在纳米服务器中等待

时间:2019-01-14 16:18:43

标签: perl docker nano-server

我正在尝试在基于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服务器特有的。

1 个答案:

答案 0 :(得分:0)

ActiveState支持人员对此问题给予了答复。

  

Nano服务器不支持标准的ActiveState构建。 Nano缺少太多组件。如果您有兴趣追求定制版本,我可以将您与我们的销售团队联系起来,他们可以描述我们的企业级产品。

因此,似乎我想坚持使用Nano服务器,要么必须等到有人决定将其实施到标准版本中,要么我需要切换到其他Perl发行版。

在此之前,我将使用有效的服务器核心。