将shell或bash添加到docker映像(基于Debian GNU/Linux的无发行版)
我想将将shell或bash添加到docker映像(基于Debian GNU/Linux的无发行版),bash,docker,dockerfile,glibc,docker-entrypoint,Bash,Docker,Dockerfile,Glibc,Docker Entrypoint,我想将shell或bash添加到我的映像中以执行安装命令 我已将虚拟机上的/bin/bash复制到Dockerfile上的图像中: COPY /bin/bash /bin/ 但当我执行docker命令时: docker run -it --entrypoint "/bin/bash" <my_image> docker运行-it--entrypoint”/bin/bash 然后我得到以下错误: /bin/bash:加载共享库时出错:libtinfo.so.5:无法打开共享对象
shell
或bash
添加到我的映像中以执行安装命令
我已将虚拟机上的/bin/bash
复制到Dockerfile
上的图像中:
COPY /bin/bash /bin/
但当我执行docker命令时:
docker run -it --entrypoint "/bin/bash" <my_image>
docker运行-it--entrypoint”/bin/bash
然后我得到以下错误:
/bin/bash:加载共享库时出错:libtinfo.so.5:无法打开共享对象文件:没有此类文件或目录
感谢您的帮助这是因为您试图在
docker
中使用动态编译的bash
,而不需要glibc
支持
TL;博士
- 。。。使用而不是经典
你可以走,也可以跑bash
- 或者为
添加alpine
:将此行添加到bash
:Dockerfile
运行apk add--no cache bash
Alpine
是一个基于musl
的发行版
许多docker映像都是以alpine
作为基础映像构建的:
alpine
(通常)体积小且速度快:
下面是流行操作系统映像的大小
资料来源:
图像大小的差异是惊人的:范围从1MB的BusyBox一直到230MB的Fedora。看到集群的发生是很有趣的。Alpine和BusyBox是轻量级的,接近0MB,然后像Debian和Ubuntu这样的中量级软件大约有100MB,最大的是像CentOS和OracleLinux这样的重量级软件,增加了200MB
musl
不包含libtinfo
有关glibc
和musl
另外,即使在空容器中,您也可以从scratch
您现在可以添加busybox 您是否可以将此问题扩展为包含,特别是包括Dockerfile的
FROM
行?(它是“Distorless”还是“基于Debian发行版”?)您通常如何将软件安装到此映像中?(是否包含某种包管理器?)您好@DavidMaze,在我的Dokerfile中,我使用基于nginx配置的不可发行性的api gate way映像感谢您的消息@Yasen。我将尝试使用这个'RUN apk add--no cache bash',我已经在Dockerfile上添加了命令:'RUN apk add--no cache bash',但是我有一个错误:步骤4/5:RUN apk add--no cache bash-->在99bf0a92c050 OCI运行时运行创建失败:container\u linux。go:348:启动容器进程导致“exec:\”/bin/sh\“:stat/bin/sh:没有这样的文件或目录”:未知如果不能使用shell,如何执行“apk”命令?无发行版docker映像没有shell。
FROM scratch
ADD bash
ENTRYPOINT ['/bash']