2016-07-26 3 views
6

In meinem Dockerfile, ich bin Einstellung der Perl-Module auf, die installiert werden, wenn ausgeführt, etwa so:Wie richte ich meine Dockerfile so ein, dass sie cpanm verwendet, um eine bestimmte Version eines Perl-Moduls zu installieren?

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

jedoch für ein Modul, ich eine bestimmte Version eines Moduls benötigen, nicht die neueste ein. Wie kann ich diese Version in der obigen Zeile angeben?

Ich habe stundenlang online gesucht und noch nichts Nützliches gefunden.

Antwort

6

Statt einen Modulnamen anzugeben, eine URL angeben. Verwenden Sie statt Class::Data::Inheritablehttps://cpan.metacpan.org/authors/id/T/TM/TMTM/Class-Data-Inheritable-0.06.tar.gz

Sie können die entsprechende URL finden, indem Sie zu module page on metacpan gehen, die gewünschte Version auswählen und den Download-Link kopieren.

PS: Sie möchten vielleicht auch PERL_CPANM_OPT=--from https://cpan.metacpan.org/ in der Umgebung so cpanm nur Downloads mit HTTPS.

+1

Toller Tipp über die Umwelt Option! – Mik

4

Damit CPAN eine bestimmte Version eines Moduls installiert, müssen Sie die vollständige Modulverteilungsdateiname einschließlich des Autors angeben. Zum Beispiel das Modul Set::Object Version 1.28, in der Befehlszeile Typ zu installieren:

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

Das Gleiche gilt für Docker anwenden, fügen Sie einfach

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

Für alle, die in Zukunft für die gleiche Antwort der Benutzer kann eine andere Option hier in the documentation for cpanm finden:

cpanm [email protected] 

Wenn Sie eine lange Liste von Modulen haben, betrachten ein cpanfile in Fütterung cpanm anstatt sie alle in der Dockerfile aufzulisten.

Der einfachste Weg, eine bestimmte Versionsnummer für ein Modul in einem cpanfile ist wie folgt zu spezifizieren:

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

Die Syntax dies die letzte Version eines Moduls ist für die Anforderung:

requires 'Text::ParseWords'; 

Anforderung einer Mindestversion: (notieren Sie das Fehlen von "==")

Die Syntax zum Anfordern bestimmter Versionen auf andere Arten ist ziemlich gut dokumentiert .

Eine weitere große Zuschreibung von der Verwendung von cpanm und ein cpanfile können in Installation of cpan modules by cpanm and cpanfile finden.

+1

Ausgezeichnete Zusammenfassung (ich werde die Formatierung etwas später aufräumen). Beachten Sie jedoch, dass ich in der Produktion gerne genau weiß, woher alles kommt.Zu diesem Zweck möchten Sie möglicherweise ein eigenes Repository mit bestimmten Instanzen von CPAN-Dist-Dateien behalten. Siehe auch [CPAN :: Mini] (https://metacpan.org/pod/CPAN::Mini) und [Pinto] (https://metacpan.org/pod/Pinto). –

+1

Danke. Ich schaute in Pinto und entschied, dass es Overkill wäre, da ich nur das nutze, um Docker-Container zu drehen. [Carton] (https://metacpan.org/release/carton) ist ein anderes Tool, das zu berücksichtigen ist, obwohl es auch die cpanfile verwendet, und ich habe Probleme beim Ausarbeiten der Arbeitssyntax, um eine URL anstelle einer Versionsnummer in die cpanfile. – Mik

+1

Ich glaube nicht, dass es eine Syntax gibt, um Module per URL in eine cpanfile aufzunehmen. Sie können jedoch wahrscheinlich denselben Effekt erzielen, indem Sie den Spiegel in der Umgebung festlegen und eine genaue Version angeben. –

Verwandte Themen