【问题标题】:Docker image doesn't download every files properlyDocker 映像无法正确下载每个文件
【发布时间】:2020-07-27 13:01:16
【问题描述】:

我正在基于 CentOS 创建我的 docker 映像。我想让它安装 SonarScanner、一个构建包装器和 GNU ARM Embedded Toolchain 来分析 C 文件。我写了一个 Dockerfile 来运行这些任务。

安装所需工具后,我使用 curl 命令下载不同的存档。我在下载和提取 Sonar 扫描仪和 Build Wrapper 时没有遇到任何问题,但是当我尝试下载 GNU ARM 工具链时,我的文件系统找不到它,因此无法提取存档。我觉得这很奇怪,因为我使用的命令与前两个命令完全相同。我也尝试使用 wget,结果相同。这是我的 Dockerfile:

# Base image centos 7 for building
FROM centos:7

RUN yum install -y make wget unzip tar

#Downloading and extracting Sonar-Scanner

RUN export SONAR_SCANNER_VERSION=4.4.0.2170 \
    && export SONAR_SCANNER_HOME=$HOME/.sonar/sonar-scanner-$SONAR_SCANNER_VERSION-linux \
    && curl --create-dirs -sSLo $HOME/.sonar/sonar-scanner.zip https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-$SONAR_SCANNER_VERSION-linux.zip \
    && unzip -o $HOME/.sonar/sonar-scanner.zip -d $HOME/.sonar/ \
    && export PATH=$SONAR_SCANNER_HOME/bin:$PATH \
    && export SONAR_SCANNER_OPTS="-server" 

#Downloading and extracting build-wrapper-x86

RUN curl --create-dirs -sSLo $HOME/.sonar/build-wrapper-linux-x86.zip https://sonarcloud.io/static/cpp/build-wrapper-linux-x86.zip \
    && unzip -o $HOME/.sonar/build-wrapper-linux-x86.zip -d $HOME/.sonar/ \
    && export PATH=$HOME/.sonar/build-wrapper-linux-x86:$PATH

RUN ls -la $HOME/.sonar/

#Downloading and installing ARM GCC embedded toolchain

RUN curl --create-dirs -sSLo $HOME/tools/arm-gcc-embedded-toolchain.tar.bz2 https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2020q2/gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2?revision=05382cca-1721-44e1-ae19-1e7c3dc96118&la=en&hash=D7C9D18FCA2DD9F894FD9F3C3DC9228498FA281A \
&& tar xjf $HOME/tools/arm-gcc-embedded-toolchain.tar.bz2 \
&& export ARM_GCC_EMBEDDED_TOOLCHAIN=$HOME/tools/arm-gcc-embedded-toolchain \
&& export PATH=$ARM_GCC_EMBEDDED_TOOLCHAIN/bin:$PATH

RUN ls -la $HOME/tools

尝试创建图像时出现以下错误:

tar (child): /root/tools/gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now

我还尝试使用简单的“ls -la $HOME/tools”启动不带提取部分的命令,以查看是否创建了目录,但也找不到该目录。

有谁知道这可能来自哪里以及如何解决这个问题?

提前致谢

【问题讨论】:

    标签: docker curl dockerfile wget


    【解决方案1】:

    您的最后一个 URL 包含由 shell 解释的特殊字符。下载的 URL 是伪造的,您不会注意到,因为 curl 设置为静默运行。生成的文件已损坏。解决方案:引用(或转义)您的 URL。

    您的图片中也缺少 bzip2:您想将其添加到您的 yum install 命令中。

    通过这些更改,您的 Dockerfile 构建成功:

    --- Dockerfile.initial  2020-07-27 16:28:25.907617868 +0200
    +++ Dockerfile  2020-07-27 16:29:14.347777643 +0200
    @@ -1,7 +1,7 @@
     # Base image centos 7 for building
     FROM centos:7
    
    -RUN yum install -y make wget unzip tar
    +RUN yum install -y make wget unzip tar bzip2
    
     #Downloading and extracting Sonar-Scanner
    
    @@ -22,7 +22,7 @@
    
     #Downloading and installing ARM GCC embedded toolchain
    
    -RUN curl --create-dirs -sSLo $HOME/tools/arm-gcc-embedded-toolchain.tar.bz2 https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2020q2/gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2?revision=05382cca-1721-44e1-ae19-1e7c3dc96118&la=en&hash=D7C9D18FCA2DD9F894FD9F3C3DC9228498FA281A \
    +RUN curl --create-dirs -sSLo $HOME/tools/arm-gcc-embedded-toolchain.tar.bz2 'https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2020q2/gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2?revision=05382cca-1721-44e1-ae19-1e7c3dc96118&la=en&hash=D7C9D18FCA2DD9F894FD9F3C3DC9228498FA281A' \
     && tar xjf $HOME/tools/arm-gcc-embedded-toolchain.tar.bz2 \
     && export ARM_GCC_EMBEDDED_TOOLCHAIN=$HOME/tools/arm-gcc-embedded-toolchain \
     && export PATH=$ARM_GCC_EMBEDDED_TOOLCHAIN/bin:$PATH
    

    【讨论】:

    • 谢谢,就是这样!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-10
    相关资源
    最近更新 更多