【问题标题】:When Building a Dockerfile I can't have Perl and curl / git in the same definition构建 Dockerfile 时,我不能在同一定义中使用 Perl 和 curl / git
【发布时间】:2016-07-20 01:26:42
【问题描述】:

我正在尝试使用 Dockerfile 构建一个包含 Perl、curl 和 git 的小型导出,以便与 GitHub 一起用作 chroot 环境。任何将 curl 或 git 放入 Dockerfile 的尝试最终都会从导出的 tar 文件中删除目录。我可以将 Perl 与 Firefox 等其他软件包结合起来,最终得到一个可用的 tar。

这是 Dockerfile。如前所述,如果我只要求 Perl 或使用 Perl 的 curl / git 以外的任何东西,它确实有效。

FROM gliderlabs/alpine:3.4

RUN apk add --update \
    curl \
    perl-dev \
    git \
  && rm -rf /var/cache/apk/*

ENTRYPOINT ["/usr/bin/perl", "-de0"]

欢迎任何见解。

【问题讨论】:

    标签: github docker alpine


    【解决方案1】:

    尝试一些事情

    • 为每次安装尝试额外的“RUN”命令
    • 每一步后删除缓存
    • 在构建 docker 镜像时不使用缓存选项。 docker build -no-cache

    【讨论】:

    • 谢谢。我确实尝试了其中的每一个。如上所述,我导出的 tar 文件不包含可执行文件。
    【解决方案2】:

    我运行你的 Dockerfile 没有问题:

    $ cat df.alpine
    FROM gliderlabs/alpine:3.4
    
    RUN apk add --update \
        curl \
        perl-dev \
        git \
      && rm -rf /var/cache/apk/*
    
    $ docker build -t alpinetest -f df.alpine .
    Sending build context to Docker daemon 37.89 kB
    Step 1 : FROM gliderlabs/alpine:3.4
    3.4: Pulling from gliderlabs/alpine
    a03be5b52c0f: Pull complete
    Digest: sha256:f34605566fc0827029c786094d104703f68953a7845d5bf4334c4c50fea6200c
    Status: Downloaded newer image for gliderlabs/alpine:3.4
     ---> eeae34df12d9
    Step 2 : RUN apk add --update     curl     perl-dev     git   && rm -rf /var/cache/apk/*
     ---> Running in 21aeec842908
    fetch http://alpine.gliderlabs.com/alpine/v3.4/main/x86_64/APKINDEX.tar.gz
    fetch http://alpine.gliderlabs.com/alpine/v3.4/community/x86_64/APKINDEX.tar.gz
    (1/9) Installing ca-certificates (20160104-r4)
    (2/9) Installing libssh2 (1.7.0-r0)
    (3/9) Installing libcurl (7.49.1-r0)
    (4/9) Installing curl (7.49.1-r0)
    (5/9) Installing expat (2.1.1-r1)
    (6/9) Installing pcre (8.38-r1)
    (7/9) Installing git (2.8.3-r0)
    (8/9) Installing perl (5.22.2-r0)
    (9/9) Installing perl-dev (5.22.2-r0)
    Executing busybox-1.24.2-r9.trigger
    Executing ca-certificates-20160104-r4.trigger
    OK: 69 MiB in 20 packages
     ---> 7ee2fd822c7a
    Removing intermediate container 21aeec842908
    Successfully built 7ee2fd822c7a
    
    $ docker run --rm -it alpinetest /bin/sh
    / # which git
    /usr/bin/git
    / # which perl
    /usr/bin/perl
    / # which curl
    /usr/bin/curl
    
    / # perl -v
    
    This is perl 5, version 22, subversion 2 (v5.22.2) built for x86_64-linux-thread-multi
    
    Copyright 1987-2015, Larry Wall
    
    Perl may be copied only under the terms of either the Artistic License or the
    GNU General Public License, which may be found in the Perl 5 source kit.
    
    Complete documentation for Perl, including FAQ lists, should be found on
    this system using "man perl" or "perldoc perl".  If you have access to the
    Internet, point your browser at http://www.perl.org/, the Perl Home Page.
    
    / # curl --version
    curl 7.49.1 (x86_64-alpine-linux-musl) libcurl/7.49.1 OpenSSL/1.0.2h zlib/1.2.8 libssh2/1.7.0
    Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp
    Features: IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP UnixSockets
    
    / # git --version
    git version 2.8.3
    

    如果您的输出与上述不同,请更新您的问题并提供更多详细信息。


    编辑:根据您的要求,我还包括了一个导出,并且二进制文件显示没有问题:

    $ docker create --name alpinetestc alpinetest /bin/true
    $ docker export alpinetestc | gzip >alpinetest.tgz
    $ tar -tvzf alpinetest.tgz usr/bin/git
    -rwxr-xr-x 0/0         1944216 2016-05-26 10:44 usr/bin/git
    $ tar -tvzf alpinetest.tgz usr/bin/curl
    -rwxr-xr-x 0/0          173912 2016-05-30 12:11 usr/bin/curl
    $ tar -tvzf alpinetest.tgz usr/bin/perl
    -rwxr-xr-x 0/0            9872 2016-05-16 06:22 usr/bin/perl
    

    您似乎没有提供足够的详细信息来重现您的问题。

    【讨论】:

    • 我期待在 tar 文件中看到这些。我生成的 tar 文件只包含 bin、dev 等顶级文件夹......我在其中找不到 perl、curl 或 git 可执行文件。
    • 这是一组用于导出以供在 GitHub 中使用的命令。
      docker build -f docker.perl -t docker.perl。 docker create --name docker.perl docker.perl /bin/true docker export docker.perl | gzip > docker.perl.tar.gz
    • 你好。感谢您检查这一点。我无法在 Windows 10 Pro 上使用 Docker for Windows 或在 Windows 10 Home 上使用 Docker Toolbox。我可以尝试在 Linux 机器上构建导出,看看这是否是导致我悲伤的原因。
    • 您好:问题原来是在使用 WinRar 在 Windows 中验证生成的导出时,符号链接无法正确解析并导致文件似乎丢失。仅添加 perl 时,没有符号链接,因此验证文件没有问题。感谢您指出它确实在 Linux 下正确构建。在那之后,我意识到符号链接让我担心。 IskiE
    • @IskieIsketerol 感谢您的跟进,很高兴听到 Docker 没有损坏,至少在这种情况下。在 Linux 上本地运行 Docker 确实为我解决了很多我看到其他人遇到的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-16
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    • 2018-10-21
    • 1970-01-01
    相关资源
    最近更新 更多