【问题标题】:Docker download and install binaryDocker 下载并安装二进制文件
【发布时间】:2022-06-13 04:38:52
【问题描述】:

我正在尝试按照本指南在 docker 文件中安装 Hugo 工具

https://gohugo.io/getting-started/installing/#debian-and-ubuntu

我做的是以下

FROM debian:11.3
RUN apt-get update \
    && apt-get install -y --no-install-recommends \
         hugo
RUN ["hugo version"]

除了最后一条语句RUN ["hugo version"]之外,docker build 工作正常

错误是> [3/3] RUN ["hugo version"]: #7 0.173 container_linux.go:380: starting container process caused: exec: "hugo version": executable file not found in $PATH 我怎样才能将它添加到路径中,我假设如果我下载它应该在那里但没有。有什么想法吗?

更新

当我把它改成 RUN hugo version

我得到了以下没有打印版本的输出,知道我在这里遗漏了什么吗?

#7 [3/3] RUN hugo version
#7 sha256:d032565cca2aac041e6791690dbcb32f2dc9d024d05699f67d21eb51cb39b0fc
#7 CACHED

#8 exporting to image
#8 sha256:e8c613e07b0b7ff33893b694f7759a10d42e180f2b4dc349fb57dc6b71dcab00
#8 exporting layers done
#8 writing image sha256:db76bafd84f0bdf930625714a72e2d0e1967578c48df0ffd0b4fc869c802f18f done
#8 DONE 0.0s

【问题讨论】:

  • JSON-array 形式强制 "hugo version" 是一个单词,它在 /usr/bin 的文件名中寻找一个带有空格的命令。删除引号; RUN hugo version.
  • @DavidMaze- 谢谢,我试过了,RUN hugo version 但它不显示版本,知道吗?还有什么事要做吗?
  • 打印什么? docker build --progress=plain . 有帮助吗 (When using BuildKit with Docker, how do I see the output of RUN commands?)?
  • @DavidMaze - #7 [3/3] RUN hugo version #7 sha256:d032565cca2aac041e6791690dbcb32f2dc9d024d05699f67d21eb51cb39b0fc #7 CACHED #8 exporting to image #8 sha256:e8c613e07b0b7ff33893b694f7759a10d42e180f2b4dc349fb57dc6b71dcab00 #8 exporting layers done #8 writing image sha256:db76bafd84f0bdf930625714a72e2d0e1967578c48df0ffd0b4fc869c802f18f done #8 DONE 0.0s
  • @DavidMaze - 我已经用输出更新了问题

标签: bash docker binary dockerfile debian


【解决方案1】:

当 docker build 执行该行时:RUN hugo version,则默认情况下,它不会显示未从缓存中加载的运行命令的输出。因此你看不到它的输出。

当我使用以下标志运行 docker build 命令时:--progress=plain,我可以看到 RUN 命令的“非缓存”行的输出。更多详情可在this answer 中找到。这是我得到的输出的屏幕截图:

一些观察:

  1. 我在其中一个 cmets 中看到您尝试使用此标志运行 docker build,但仍然无法正常工作。这是因为,如果您仔细观察,“RUN hugo version”行是“CACHED”。这个标志--progress=plain 显示了未缓存或新执行的行的中间步骤。 因此,如果您想查看输出,您需要先使用以下命令清除 docker build 缓存和所有悬空图像:
$docker builder prune -a
$docker image prune -a

在这一步之后,您将能够重新执行所有构建步骤,并能够看到RUN hugo version 的输出。

  1. 为了让你的 hugo 容器在你从你构建的镜像中旋转后保持运行,你需要指定 CMDENTRYPOINT 命令。使用这些 dockerfile 指令指定的命令仅在您从已构建的镜像中旋转容器时执行,而不是在构建镜像时执行。例如,如果我的 dockerfile 是:
FROM debian:11.3
RUN apt-get update \
    && apt-get install -y --no-install-recommends \
         hugo
CMD hugo version

构建期间的输出将是: 指令CMD hugo version没有被执行。

在我通过命令从这个构建的映像运行容器后: 然后只有我会看到这条指令的输出。

我希望这有助于建立理解!

【讨论】:

【解决方案2】:

你想要的不是CMD而不是RUN吗(在最后一行)?

【讨论】:

  • 谢谢我试过了,但它不起作用,还有其他想法吗?
【解决方案3】:

您可以使用--no-cache 运行docker build 命令以查看没有缓存的输出:

完整的 Dockerfile:

FROM debian:11.3
RUN apt-get update \
    && apt-get install -y --no-install-recommends \
         hugo
RUN hugo version

完整命令:

docker build . --progress plain --no-cache

这显示:

#6 [3/3] RUN hugo version
#6 sha256:d032565cca2aac041e6791690dbcb32f2dc9d024d05699f67d21eb51cb39b0fc
#6 0.494 Hugo Static Site Generator v0.80.0/extended linux/amd64 BuildDate: 2021-07-18T09:31:51Z (debian 0.80.0-6+b5)
#6 DONE 0.5s

另外,使用 [] 语法时需要将命令和参数分开,所以它看起来像 RUN ["hugo", "version"]

【讨论】:

    猜你喜欢
    • 2020-08-22
    • 2012-05-17
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 2016-02-25
    相关资源
    最近更新 更多