bash - Docker 下载并安装二进制文件

标签 bash docker binary dockerfile debian

我正在尝试安装 Hugo遵循此指南的 docker 文件中的工具

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 构建工作正常

错误是 > [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 我怎样才能将它添加到路径中,我假设如果我下载它它应该在那里但没有。有什么想法吗?

更新

当我把它改成 运行hugo版本

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

#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

最佳答案

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

当我使用此标志运行 docker build 命令时:--progress=plain,我可以看到 RUN 命令的“非缓存”行的输出。更多详细信息,请参阅 this answer .这是我得到的输出的屏幕截图: enter image description here

一些观察:

  1. 我在其中一条评论中看到,您尝试使用此标志运行 docker build,但它仍然无效。这是因为,如果您仔细观察,“RUN hugo version”行是“CACHED”。而这个标志 --progress=plain 显示了未缓存或新执行的行的中间步骤。 因此,如果您希望查看输出,您需要先使用以下命令清除 docker 构建缓存和所有悬空图像:
$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

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

在我通过命令从这个构建的镜像运行一个容器之后: enter image description here 然后只有我会看到这条指令的输出。

我希望这有助于加深理解!

关于bash - Docker 下载并安装二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72463871/

相关文章:

c# - 二进制到字符串为二进制?

bash - 将文件中的文本附加到另一个文件中的文本

docker - 如何让 Docker 容器访问主机上的 dnsmasq 本地 DNS 解析器?

linux - chmod : missing operand after a+t

docker - ` docker attach `附加到哪个进程?

docker - 清理一半下载的Docker镜像

C 编程位表示

ruby - 如何在 ruby​​ 中一次解压 7 位?

linux - 是否可以将 "push"消息发送到事件的 bash 终端?

arrays - 将 JSON 数组读入 Bash 数组