6

我想在我的图像中添加shellbash执行安装命令。

我已将 VM 上的 复制/bin/bash到我的图像上Dockerfile

COPY /bin/bash /bin/

但是当我执行 docker 命令时:

 docker run -it --entrypoint "/bin/bash" <my_image>

然后我收到以下错误:

/bin/bash: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory

谢谢你的帮助

4

1 回答 1

3

那是因为你试图bashdocker没有glibc支持的情况下使用动态编译。

TL;博士

  • ...要么使用bash-static而不是经典bash 您可以下载或运行./build.sh
  • 或添加:将此行添加到您bash的:alpineDockerfileRUN apk add --no-cache bash

Alpine是一个musl基于发行版

许多 docker 镜像都是alpine作为基础镜像构建的:( alpine通常)小而快:

以下是流行操作系统的图像大小。

图像大小的差异 来源:Dockerhub 操作系统分解

图像大小的差异是惊人的:范围从 1MB 的 BusyBox 一直到 230MB 的 Fedora。看到集群发生很有趣。Alpine 和 BusyBox 是轻量级的,接近 0MB,然后像 Debian 和 Ubuntu 这样的中量级大约 100MB,最大的是 CentOS 和 Oracle Linux 等重量级的 200MB。

musl不包含libtinfo

查看更多关于 glibc 之间的差异glibcmusl 功能差异的信息

PS你bash-static甚至可以在空容器中运行scratch

FROM scratch
ADD bash
ENTRYPOINT ['/bash']

您现在可能可以添加busybox。

于 2020-04-05T09:10:47.703 回答