egr*_*rey 5 bash glibc docker dockerfile docker-entrypoint
我想添加shell或bash到我的图像以执行安装命令。
我已将/bin/bashVM 上的复制到我的映像上Dockerfile:
COPY /bin/bash /bin/
Run Code Online (Sandbox Code Playgroud)
但是当我执行 docker 命令时:
docker run -it --entrypoint "/bin/bash" <my_image>
Run Code Online (Sandbox Code Playgroud)
然后我收到以下错误:
/bin/bash: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory
谢谢你的帮助
aoe*_*oee 29
您可以通过在 Dockerfile 的多阶段构建中从官方busybox映像复制静态编译的 shell 来完成此操作。或者只是COPY --from它。
静态 shell 没有太多依赖项,因此它适用于一系列不同的基础映像。它可能不适用于某些高级案例,但除此之外它可以完成工作。
静态编译的 shell 带有uclibc. 根据您的基本映像,您busybox也可能会在其他风格上取得成功。
例子:
FROM busybox:1.35.0-uclibc as busybox
FROM gcr.io/distroless/base-debian11
# Now copy the static shell into base image.
COPY --from=busybox /bin/sh /bin/sh
# You may also copy all necessary executables into distroless image.
COPY --from=busybox /bin/mkdir /bin/mkdir
COPY --from=busybox /bin/cat /bin/cat
ENTRYPOINT ["/bin/sh", "/entrypoint.sh"]
Run Code Online (Sandbox Code Playgroud)
直接来自图像的单行COPY --from也可以工作:
FROM gcr.io/distroless/base-debian11
COPY --from=busybox:1.35.0-uclibc /bin/sh /bin/sh
ENTRYPOINT ["/bin/sh", "/entrypoint.sh"]
Run Code Online (Sandbox Code Playgroud)
mir*_*phd 10
Google 的 distroless 映像具有标记为 的版本debug,其中包含busybox可执行文件(sh捆绑在一起)。
如果必须的话,甚至可以在生产中使用它们(这违背了提高安全性的目的 - 例如隐藏环境变量和保护脚本化应用程序代码)。
distroless/base带标签的图像的使用示例debug:
$ docker run -it --rm --name base -u 0 gcr.io/distroless/base:debug
/ # id
uid=0(root) gid=0(root)
Run Code Online (Sandbox Code Playgroud)
那是因为您尝试bash在docker不使用动态编译的情况下使用动态编译glibc支持的情况下使用动态编译。
bash-static而不是经典bash\n您可以下载它或运行./build.shbash:alpine将此行添加到您的Dockerfile:RUN apk add --no-cache bashAlpine是一个musl基于 - 的发行版许多 docker 镜像都是使用alpine基础镜像构建的:\nalpine(通常)小而快:
以下是流行操作系统的映像大小。
\n
\n来源: Dockerhub 操作系统细分
\n\n图像大小的差异是惊人的:范围从 1MB 的 BusyBox 一直到 230MB 的 Fedora。看到聚类的发生很有趣。Alpine 和 BusyBox 是轻量级的,接近 0MB,然后是 Debian 和 Ubuntu 等中量级的,大约为 100MB,最大的是 CentOS 和 Oracle Linux 等重量级的,高达 200MB。
\n
musl不包含libtinfo查看更多关于glibc和之间的区别musl 与 glibc 的功能差异
bash-staticPS你甚至可以在空容器中scratchFROM scratch\nADD bash\nENTRYPOINT [\'/bash\']\nRun Code Online (Sandbox Code Playgroud)\n您现在可以添加 busybox 了。
\n| 归档时间: |
|
| 查看次数: |
5825 次 |
| 最近记录: |