2016-07-26 67 views
6

在我的Dockerfile,我設立運行時將安裝Perl模塊,像這樣:如何設置我的Dockerfile以使用cpanm來安裝特定版本的Perl模塊?

RUN ["cpanm", "Carp", "Carp::Heavy", "Class::Data::Inheritable"]

但是,對於一個模塊,我需要一個模塊的特定版本不是最新的一。我如何在上面的行中指定該版本?

我一直在網上搜索幾個小時,還沒有發現任何有用的東西。

回答

6

代替指定模塊名稱,指定的URL。例如,使用https://cpan.metacpan.org/authors/id/T/TM/TMTM/Class-Data-Inheritable-0.06.tar.gz

您可以轉到module page on metacpan,選擇所需的版本並複製下載鏈接,以找到適用的URL。

PS:您可能還想在環境中設置PERL_CPANM_OPT=--from https://cpan.metacpan.org/,因此cpanm只能使用HTTPS下載。

+1

有關環境選項的好建議! – Mik

4

要讓CPAN安裝特定版本的模塊,您需要提供完整的模塊分發文件名,包括作者。例如,要安裝該模塊Set::Object版本1.28,在命令行中輸入:

cpan SAMV/Set-Object-1.28.tar.gz 

同樣的事情適用與碼頭工人,只需添加

RUN cpan SAMV/Set-Object-1.28.tar.gz 
3

任何人誰是尋找在未來這個相同的答案,另一種選擇可以在這裏找到在the documentation for cpanm

cpanm [email protected] 

如果你有模塊的一個長長的清單,考慮餵養cpanfilecpanm,而不是將它們全部列在Dockerfile中。

指定在cpanfile模塊特定版本號的最簡單的方法是這樣的:

requires 'Text::ParseWords', '==3.1'; 

請求的最新版本模塊的語法是這樣的:

requires 'Text::ParseWords'; 

請求最低版本:(注意缺少'==')

requires 'Text::ParseWords', '3.1'; 

以其他方式請求特定版本的語法已得到很好的記錄here

使用cpanmcpanfile的另一個很好的寫法可以在Installation of cpan modules by cpanm and cpanfile中找到 。

+1

非常好的總結(我將在稍後整理一下格式)。但是,請注意,在製作過程中,我想知道所有內容都來自哪裏。爲此,您可能希望保留自己的CPAN dist文件特定實例的存儲庫。另請參閱[CPAN :: Mini](https://metacpan.org/pod/CPAN::Mini)和[Pinto](https://metacpan.org/pod/Pinto)。 –

+1

謝謝。我看着平託,並決定這將是矯枉過正,因爲我只是用它來旋轉碼頭集裝箱。 [Carton](https://metacpan.org/release/carton)是另一個需要考慮的工具,雖然它也使用cpanfile,而且我在查找工作語法時遇到了問題,以便在其中包含url而不是版本號cpanfile。 – Mik

+1

我不認爲在cpanfile中有通過URL包含模塊的語法。但是,您可以通過在環境中設置鏡像並指定確切的版本來達到相同的效果。 –