Я пытаюсь запустить скрипт Perl в док-контейнере на основе Windows 2016 Nano Server. Для этого я использую ActivePerl 5.24.
Теперь я столкнулся с интересной проблемой, когда вызов system () ведет себя по-разному на моем сервере 2016 года и в контейнере Nano Server 2016 года.
#!/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:
На сервере Nano в моем контейнере Docker это выглядит так:
C:\>perl test.plx
Return: 768
Exit: 3
Signal: 0
Message:
Итак, как вы видите, вывод отсутствует, а код возврата не равен 0.
Если я сейчас нажму return ..
C:\>
C:\>test.plx syntax OK
Так что похоже, что system () не ждет и возвращает 768 (что бы это ни значило)
Я также пытался использовать "ping -v" вместо "perl -c", но происходит то же самое, поэтому это должно быть что-то, связанное с реализацией system ().
Кто-нибудь знает, почему один и тот же вызов ведет себя совершенно по-разному в контейнере Docker и что я мог сделать, чтобы заставить system () ждать?
Обновление:
Я подтвердил, что это работает, когда я использую microsoft / windowsservercore в качестве базового образа. Так что все, что здесь происходит, похоже, относится к Nano Server.