在Docker容器中,我有一个Perl脚本,我需要能够解析JSON,我试图在我的Dockerfile中为Perl安装CPAN JSON
。
所以我在我的Dockerfile
中执行以下操作
FROM centos:7.9.2009
RUN yum install -y cpanm \
perl \
perl-App-cpanminus \
perl-Config-Tiny \
sudo \
&& yum clean all \
&& sudo cpanm install JSON;
但是当我做一个docker build
时,我得到:
#0 41.76 Configuring Test-Simple-1.302195 ... OK
#0 41.95 Building and testing Test-Simple-1.302195 ... OK
#0 68.48 Successfully installed Test-Simple-1.302195
#0 68.59 Building and testing JSON-4.10 ... OK
#0 126.9 Successfully installed JSON-4.10
#0 127.0 2 distributions installed
------
ERROR: failed to solve: executor failed running [/bin/sh -c yum install -y cpanm perl perl-App-cpanminus perl-Config-Tiny sudo && yum clean all && sudo cpanm install JSON;]: exit code: 1
有什么问题吗?
3条答案
按热度按时间mznpcxlj1#
这并没有回答你的问题,但是我最近不得不通过弄清楚如何找到cpanm错误来调试cpanm情况(尽管设置
--verbose
也可以工作)。首先,找到构建遗留的容器ID。这可能是最新的容器,但命令也将以PERL_CARTON_MIRROR环境变量开始:
使用容器ID(第一列)将该容器提交到映像:
现在获取cpanm构建日志:
yhived7q2#
有两个问题需要解决。
1.软件包
cpanm
无法安装在第一位。运行docker run -it centos:7.9.2009 /bin/bash
并在容器中执行yum install -y cpanm
。我得到:没有可用的软件包cpanm。
错误:无事可做
当我运行
yum install -y cpanm perl sudo perl-App-cpanminus
,然后运行echo $?
时,返回的是0
,因为它确实安装了其他软件包。这意味着这个阶段不是破坏您构建的原因。这是因为为了从cpanm
安装软件包,您需要的软件包是perl-App-cpanminus
。要解决这个问题,只要从要安装的模块列表中删除cpanm
(因为你已经安装了perl-App-cpanminus
)。因为这不会破坏构建,所以它不是严格必要的,只是强烈推荐。1.然后运行
cpanm install JSON
命令返回:所以你可以看到你不需要
install
这个词,运行echo $?
返回的代码是1
,所以这就是破坏你的构建的步骤。旁注
Dockerfile
,所以我不能说),那么sudo
包是多余的。&& sudo cpanm install JSON;
中使用sudo
安装软件包肯定是多余的。f4t66c6m3#
首先,
cpanm
不是CentOS中的一个软件包。我建议将安装步骤分解为单独的RUN
命令,只是为了维护映像(并查看错误)。其次,没有必要
sudo
cpanm
。如果你安装cpanm
,我不明白为什么你要通过yum
安装Config::Tiny
,所以我会用cpanm
安装它。将这些命令分解后会发现实际的错误,因为
cpanm
不是可以安装在CentOS上的软件包,而是:perl-App-cpanminus
。