首页 > 解决方案 > 使用 debian:stretch-slim 在 Docker 中安装 csvtk 时出现问题

问题描述

我是 Docker 的新手,我正在尝试csvtk使用debian:stretch-slim.

下面是我的Dockerfile

FROM debian:stretch-slim
RUN apt-get update \
    && apt-get install -y --no-install-recommends \
    jq                 \
    perl               \
    python3            \
    wget               \
    && rm -rf /var/lib/apt/lists/*

RUN wget -qO- https://github.com/shenwei356/csvtk/releases/download/v0.23.0/csvtk_linux_amd64.tar.gz | tar -xz \
     && cp csvtk /usr/local/bin/

它在csvtk步骤中失败并显示以下错误消息:

Step 3/3 : RUN wget -qO- https://github.com/shenwei356/csvtk/releases/download/v0.23.0/csvtk_linux_amd64.tar.gz | tar -xz      && cp csvtk /usr/local/bin/
 ---> Running in 0f3a0e75a5de

gzip: stdin: unexpected end of file
tar: Child returned status 1
tar: Error is not recoverable: exiting now
The command '/bin/sh -c wget -qO- https://github.com/shenwei356/csvtk/releases/download/v0.23.0/csvtk_linux_amd64.tar.gz | tar -xz      && cp csvtk /usr/local/bin/' returned a non-zero code: 2

我将不胜感激任何帮助/建议。

提前致谢。

标签: dockerdebian-stretch

解决方案


wget退出时出现错误代码,这意味着 wget 上的 5 SSL 验证失败。从这个答案,你只需要安装ca-certificates之前wget

此 Dockerfile 应该成功构建:

FROM debian:stretch-slim
RUN apt-get update \
    && apt-get install -y --no-install-recommends \
    jq                 \
    perl               \
    python3            \
    wget               \
    # added this package to help with ssl certs in Docker
    ca-certificates    \
    && rm -rf /var/lib/apt/lists/*

RUN wget -qO- https://github.com/shenwei356/csvtk/releases/download/v0.23.0/csvtk_linux_amd64.tar.gz | tar -xz \
     && cp csvtk /usr/local/bin/

作为调试此类问题时的一般提示,最简单的方法可能是RUN从 Dockerfile 中删除违规行,然后尝试在 shell 中构建和运行容器并手动执行所需的命令。像这样:

docker build -t test:v1 .
docker run --rm -it test:v1 /bin/bash
# run commands manually and check the full error output

虽然结合不同的RUN指令&&是减少图像层数的最佳实践,但在构建时很难调试。


推荐阅读