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