Me gustaría usar el instalador rápido del módulo cpm en lugar de cpanm en mis proyectos.
También instalo la versión perl de destino usando perlbrew .
De acuerdo con la documentación de la opción cpm -g , se instalarán módulos en el @INC actual
¿Cómo forzar el cambio de perlbrew @INC en Dockerfile?
A continuación se muestra parte de mi Dockerfile
RUN perl -le 'print for @INC' && \ perlbrew switch perl-5.31.0 && \ perl -le 'print for @INC' && \ cpm install -gv CGI && \ perlbrew list-modules Cuando construyo la salida Dockerfile de perl -le 'print for @INC' es la misma en ambas ocasiones:
/etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.22.1 /usr/local/share/perl/5.22.1 /usr/lib/x86_64-linux-gnu/perl5/5.22 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.22 /usr/share/perl/5.22 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-basePero si hago lo mismo manualmente, el resultado está bien:
$ docker run -it pavelsr/xxxhub root@1a34ea34a3fb:/# perl -le 'print for @INC' /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.22.1 /usr/local/share/perl/5.22.1 /usr/lib/x86_64-linux-gnu/perl5/5.22 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.22 /usr/share/perl/5.22 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base . root@1a34ea34a3fb:/# perlbrew switch perl-5.31.0 A sub-shell is launched with perl-5.31.0 as the activated perl. Run 'exit' to finish it. root@1a34ea34a3fb:/# perl -le 'print for @INC' /usr/local/perlbrew/perls/perl-5.31.0/lib/site_perl/5.31.0/x86_64-linux /usr/local/perlbrew/perls/perl-5.31.0/lib/site_perl/5.31.0 /usr/local/perlbrew/perls/perl-5.31.0/lib/5.31.0/x86_64-linux /usr/local/perlbrew/perls/perl-5.31.0/lib/5.31.0 root@1a34ea34a3fb:/# cpm install -g CGI DONE install HTML-Tagset-3.20 DONE install HTML-Parser-3.72 DONE install CGI-4.44 3 distributions installed. root@1a34ea34a3fb:/# perlbrew list-modules CGI HTML::Parser HTML::Tagset PerlPara empezar, " Se inicia una subcapa con... " indica que tiene un perlbrew configurado incorrectamente. Se le indicó que agregara lo siguiente a la secuencia de comandos de inicio de su shell:
source "${PERLBREW_ROOT:-$HOME/perl5/perlbrew}"/etc/bashrcSin esto, se utiliza un mecanismo alternativo para intentar proporcionar la funcionalidad deseada, pero es completamente inútil fuera de los shells interactivos.
En segundo lugar, este es un uso bastante dudoso de perlbrew. Si su secuencia de comandos docker funcionó según lo previsto, tendría consecuencias de gran alcance. Eso no es bueno. Podría usar perlbrew use , pero en su lugar podría usar la compilación perl correcta directamente usando
RUN "${PERLBREW_ROOT:-$HOME/perl5/perlbrew}"/perls/perl-5.31.0/bin/perl -S cpm install -gv CGIEn su caso, esto debería resolverse a
RUN /usr/local/perlbrew/perls/perl-5.31.0/bin/perl -S cpm install -gv CGIpara usted.