#docker #perl #ubuntu #io #cpan
#docker #perl #ubuntu #io #cpan
Вопрос:
Я новичок в Docker и Perl. Я хочу настроить свое приложение perl, но во время выполнения получаю следующую ошибку:
Error: IO::Pipe: Cannot exec: No such file or directory
Вот мой Dockerfile:
FROM ubuntu:18.04
RUN apt-get update amp;amp;
apt-get upgrade -y amp;amp;
apt-get install -y libimage-magick-perl amp;amp;
apt install -y make amp;amp;
apt install -y gcc amp;amp;
apt install -y perl amp;amp;
apt install -y cpanminus
RUN cpan install YAML
RUN cpan install IPC::Run
WORKDIR /opt
COPY . /opt/deploy
ENTRYPOINT ["perl", "/opt/deploy/bin/deploy"]
Это файл, в котором я использую модуль IO::Pipe:
package Deployment::Log::File;
use strict;
use warnings;
use base 'Tie::Handle';
use constant TRUE => (1 == 1);
use constant FALSE => (0 == 1);
use Fcntl qw(:flock);
use IO::File;
use IO::Pipe;
use Symbol;
use Sys::Hostname;
use Text::ParseWords;
use Time::HiRes;
...
my $class = shift; $class = ref($class) if ref($class);
my $destination = shift;
my $layout = shift;
my $handle;
if ($destination =~ s/^s*|s*//) {
my @token = map { $class->interpolate($_) } Text::ParseWords::shellwords($destination);
$handle = IO::Pipe->new;
$handle->writer(@token)
or return undef;
Я попытался установить IO::Pipe и IO с помощью cpan и cpanm, но ничего не сработало. Кто-нибудь может мне помочь?
Комментарии:
1. Вероятно, потребуется просмотреть некоторый код.
2. Я полагаю, вы проверили, что /opt / deploy /bin / deploy, /opt и / opt / deploy существуют и имеют правильные разрешения?
3. @TLP Можете ли вы быстро рассказать, как это сделать в среде docker?
4. @TLP Я проверил это, но / opt / deploy / bin / deploy ни в одном каталоге это мой скрипт, который я запускаю
5. Вы не показываете, на что установлен массив токенов. Наиболее вероятно, что ошибка заключается в том, что командная строка, указанная token, не может быть выполнена, поскольку команда не существует
Ответ №1:
$token[0]
ожидается, что он будет содержать имя программы для запуска. Это может быть либо путь, либо простое имя файла (которое ядро преобразует в путь, используя PATH
переменную env).
Либо вы указали простое имя файла, и исполняемый файл с таким именем не найден ни в каких каталогах, указанных в PATH
env var, либо вы указали путь к несуществующему файлу.
Возможно, программа делает неверные предположения о своем текущем рабочем каталоге?