Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为发行版构建Ubuntu docker容器时出现问题_Docker_Perl_Dockerfile - Fatal编程技术网

为发行版构建Ubuntu docker容器时出现问题

为发行版构建Ubuntu docker容器时出现问题,docker,perl,dockerfile,Docker,Perl,Dockerfile,我正在尝试为您构建一个Docker容器。我的主要想法是尽可能多地使用Ubuntu提供的软件包来避免问题;我还使用了容器附带的默认perl,显然是5.22 这是Dockerfile: FROM ubuntu:16.04 LABEL version="1.0" maintainer="JJ Merelo <jjmerelo@GMail.com>" perl5version="5.22" ADD data/* ./ ADD . . RUN mkdir /test \ &&

我正在尝试为您构建一个Docker容器。我的主要想法是尽可能多地使用Ubuntu提供的软件包来避免问题;我还使用了容器附带的默认perl,显然是5.22

这是Dockerfile:

FROM ubuntu:16.04
LABEL version="1.0" maintainer="JJ Merelo <jjmerelo@GMail.com>" perl5version="5.22"

ADD data/* ./
ADD . .
RUN mkdir /test \
    && apt-get update \
    && apt-get install -y build-essential curl hunspell-en-us libtext-hunspell-perl myspell-es libencode-perl cpanminus libfile-slurp-tiny-perl libversion-perl\
    && curl https://raw.githubusercontent.com/SublimeText/Dictionaries/master/Spanish.dic -o Spanish.dic

RUN cpanm .
RUN perl --version
VOLUME /test
WORKDIR /test

# Will run this
ENTRYPOINT prove
这似乎发生在我执行
perl Makefile.PL&&makeinstall


我真的不知道是什么原因造成的,也不知道为什么它在本地工作而在那里失败。有什么想法吗?

我想问题是你做
WORKDIR/test
太晚了。在
Dockerfile
的开头,您可以执行
ADD这将把所有文件从本地文件系统的当前目录复制到映像的根目录。问题是映像根目录中已经存在的目录之间可能存在冲突,如
/lib
。请尝试以下方式:

FROM ubuntu:16.04
LABEL version="1.0" maintainer="JJ Merelo <jjmerelo@GMail.com>" perl5version="5.22"

WORKDIR /test
ADD data/* ./
ADD . .
RUN apt-get update \
    && apt-get install -y build-essential curl hunspell-en-us libtext-hunspell-perl myspell-es libencode-perl cpanminus libfile-slurp-tiny-perl libversion-perl\
    && curl https://raw.githubusercontent.com/SublimeText/Dictionaries/master/Spanish.dic -o Spanish.dic

RUN perl --version
RUN cpanm Test::More
RUN cpanm .
VOLUME /test

# Will run this
ENTRYPOINT prove
来自ubuntu:16.04的

标签version=“1.0”mainter=“JJ Merelo”perl5version=“5.22”
WORKDIR/测试
添加数据/*/
添加
运行apt获取更新\
&&apt get install-y build sential curl hunspell en us libtext hunspell perl myspell es libencode perl cpanminus libfile slurp tiny perl libversion perl\
&&卷曲https://raw.githubusercontent.com/SublimeText/Dictionaries/master/Spanish.dic -o西班牙语
运行perl--version
运行cpanm测试::更多
运行cpanm。
容量/测试
#我会运行这个
入口点证明

问题在于,我们不使用工作目录来复制我们希望包含在目录中的文件,然后我们会添加。这包括一个
lib
目录,因此我们将模块的内容复制到lib目录,即image
/lib
目录

这本身并不坏。问题是Perl安装过程随后将自己的lib目录(即系统的lib目录)的内容复制到
blib
,然后再次将其复制到
/usr/lib
的某个目录。不知何故,在其他目录中发生了安装,这意味着错误中提到的证书最终被复制到了其他地方,因此是重复的

这并不能解释为什么它在本地工作,事实上,它在Docker Hub的后续构建中工作。可能是一些稍微不同版本的
runc
。但即使它起作用,你最终也会得到复制的东西,以及比你应有的更大的图像


基线是:不要将根目录用作工作目录。从一开始就使用WORKDIR,如果该目录中有将在其他地方安装的内容,则更是如此。

可能与此无关,但:我测试了从GitHub安装模块:
git clonegit@github.com:JJ/Test-Text.git&&cd Test-Text&&cpanm。
但由于构建和测试Alien-autoconf-0.14而失败。。。失败
,但是安装
Alien::autoconf
单独起作用:
cpanm Alien::autoconf&&cpanm.
。我尝试在笔记本电脑上运行
docker build-t测试文本。
本地运行
cpanm。
失败,因为
正在运行Makefile.PL\\\-->\\\配置//proc/12/cwd是一个递归符号链接,位于/usr/share/perl/5.22/File/Find.pm第88行。\\\检查工具包是否完整…\\\\!为…配置失败。。有关详细信息,请参阅/root/.cpanm/work/1572518663.8/build.log\\\N/A\\\命令'/bin/sh-c cpanm-v.'返回一个非零代码:1
@HåkonHægland您至少需要perl 5.22才能使其工作。。。这不是一个问题,事实上是作为Ubuntu模块之一包含的。您的第二条评论稍微澄清了问题所在,但我仍然对如何修复它感到困惑…但是由于/test将与主机文件重叠,因此我无法在那里复制任何内容。我不确定您的设置如何,以及您所说的“重叠”是指什么,但是您已经使用
ADD
命令从主机复制了文件,对吗。。你是说
命令吗?为什么不能在那里复制任何内容?这基本上意味着用户的目录将覆盖容器中写入的任何内容。无论如何,我认为这与错误无关。也许可以尝试另一个目录?至少,我不会使用root
/
,因为现在我已经更改了它,它修复了其他问题,但不是我所说的问题。理论上,Dockerfile构建的环境应该与它发生的位置无关,对吗?
FROM ubuntu:16.04
LABEL version="1.0" maintainer="JJ Merelo <jjmerelo@GMail.com>" perl5version="5.22"

WORKDIR /test
ADD data/* ./
ADD . .
RUN apt-get update \
    && apt-get install -y build-essential curl hunspell-en-us libtext-hunspell-perl myspell-es libencode-perl cpanminus libfile-slurp-tiny-perl libversion-perl\
    && curl https://raw.githubusercontent.com/SublimeText/Dictionaries/master/Spanish.dic -o Spanish.dic

RUN perl --version
RUN cpanm Test::More
RUN cpanm .
VOLUME /test

# Will run this
ENTRYPOINT prove