使用Docker的Perl安装问题

我正在尝试用perl安装构builddocker镜像。

Dockerfile:

FROM amazonlinux WORKDIR /shared RUN yum -y install gcc ADD http://www.cpan.org/src/5.0/perl-5.22.1.tar.gz /shared RUN tar -xzf perl-5.22.1.tar.gz WORKDIR /shared/perl-5.22.1 RUN ./Configure -des -Dprefix=/opt/perl-5.22.1/localperl RUN make RUN make test RUN make install 

所有这些步骤都被执行,我可以看到它正在执行make,make test和make install命令,但是当我这样做时:

 docker run -it testsh /bin/bash 

错误:

当我检查perl -v它说没有find命令。

我需要去perl目录'cd perl-5.22.1'并再次运行'make install'然后perl -v works

但是我希望perl安装在我用docker镜像构build的时候工作。 谁能告诉我这里怎么了?

perl确实被安装了,只是没有被添加到path中。 export PATH = $ PATH:/shared/perl-5.22.1应该这样做 – 但是当然,你想在Dockerfile中添加一个PATH更新。

乍看之下,我认为当你第二次运行make install时候,它make install perl的bin目录添加到PATH env中,但是当我在make install之前和之后比较env输出时,它显示了相同的PATHvariables内容。 在make install到运行容器之后得到perl -v工作的原因是make installperl二进制文件放到/ usr / bin / perl目录下。 我不知道为什么它会这样工作,但它是一样的。 另外,在图像中存储源代码几乎是无用的。

无论如何,我同意@belwood有关将您的perl的bin directiry添加到PATH环境variables的build议。 我只想纠正path: /opt/perl-5.22.1/localperl/bin

您需要将其添加到Dockerfile (基本上我已经重写了您的文件以使其生成更高效的图像),例如:

 FROM amazonlinux RUN mkdir -p /shared/perl-5.22.1 WORKDIR /shared/perl-5.22.1 RUN yum -y install gcc \ && curl -SL http://www.cpan.org/src/5.0/perl-5.22.1.tar.gz -o perl-5.22.1.tar.gz \ && tar --strip-components=1 -xzf perl-5.22.1.tar.gz \ && rm perl-5.22.1.tar.gz \ && ./Configure -des -Dprefix=/opt/perl-5.22.1/localperl \ && make -j $(nproc) \ && make -j $(nproc) test \ && make install \ && rm -fr /shared/perl-5.22.1 /tmp/* ENV PATH="/opt/perl-5.22.1/localperl/bin:$PATH" WORKDIR /root CMD ["perl","-de0"] 

当你用这个图像简单地运行容器时,你会马上进入perl的shell。 如果你需要bash,那么使用docker run -it --rm amazon-perl /bin/bash

查看Dockerfile参考文档中的环境replace部分也是很好的,只是为了弄清楚事情是如何工作的。 例如,由于RUN指令,在Dockerfile中执行多条RUN行并不是最佳实践 , 它将在当前映像之上的新层中执行命令并提交结果。 所以你会得到许多不必要的层。