具有Telnet和Ping的Docker基础镜像

3
我需要在一个Docker容器中调试网络问题,该容器使用“FROM registry.access.redhat.com/ubi7/ubi-minimal”构建。
这个容器没有像普通shell一样的“telnet”或“ping”。这是为了节省空间而故意设计的。
我尝试通过docker容器shell内的yum安装它们 - 但是yum不可用。他们使用了称为“microdnf”的东西,类似于yum。我尝试了“bash-4.2# microdnf install iputils”,但没有匹配的软件包。telnet也有同样的结果。
我尝试在创建镜像的dockerfile内运行它。它似乎被安装了,但是镜像创建失败了,“/bin/sh -c yum install iputils”命令返回了非零代码1。
我将镜像基础从“FROM registry.access.redhat.com/ubi7/ubi-minimal”更改为“FROM registry.access.redhat.com/ubi7/ubi”,这样就可以使用yum了。
无论是从容器shell还是dockerfile中,都无法成功安装“yum install iputils”。
是否有一个(最好是红帽)镜像可以让我使用“ping”并正确处理我的Dockerfile?
FROM registry.access.redhat.com/ubi7/ubi-minimal

RUN microdnf update -y && rm -rf /var/cache/yum
RUN microdnf clean all
RUN microdnf install shadow-utils

# Create a group and user
RUN groupadd -r myapp && useradd -r myapp -g myapp
RUN useradd -r aspisc  -g myapp

RUN mkdir -p /opt/smyapp/config
RUN mkdir -p /opt/smyapp/logs
RUN chown -R myapp:smyapp /opt/myapp

RUN mkdir -p /opt/myapp/bin && mkdir -p /opt/myapp/libs

RUN mkdir -p /opt/jre/

ENV JAVA_LIBS_CP /opt/myapp/libs
ENV LD_LIBRARY_PATH=/lib64
RUN echo JAVA_LIBS_CP=${JAVA_LIBS_CP}


EXPOSE 9500
EXPOSE 9501

ENTRYPOINT ["sh", "-c", "/opt/jre/bin/java $JAVA_OPTS -cp /opt/smyapp/bin/*:$JAVA_LIBS_CP/*...."] 

除了你的chown行有一个错误之外,上述的Dockerfile构建得很好,即使我在microdnf安装行中添加了iputils也是如此。而且,在运行的容器中,我可以进行ping操作,之后也能正常工作。 - undefined
为什么你想把这些命令放进Docker中呢?尤其是当它们都是相对专业化的工具时——发送ICMP数据包到某个目标有什么意义呢?而且这些工具在大多数完整的Linux发行版中都已经默认安装了。 - undefined
1
@DavidMaze 当尝试调试容器化应用程序/微服务时,拥有基本的网络工具是非常宝贵的,就像没有'vi'一样令人恼火。在Kubernetes领域,我们可以将busybox容器作为sidecar附加到pod中。但在Docker中并不那么简单。Docker的网络堆栈出了问题吗?我能访问我认为应该能访问的端口吗?这些都是需要这些工具来回答的问题。 - undefined
2个回答

0

您可以将此内容添加到ubi-minimal中。 如前所述,您只需添加iputils软件包即可。

USER root
RUN microdnf update && microdnf install sudo iputils hostname findutils less nano && microdnf clean all

你需要设置ROOT用户才能添加yum文件夹,但在部署容器到生产环境之前,非常重要的是设置另一个用户,删除sudo命令或删除所有命令。否则,您的环境可能存在非常重要的缺陷。

您还可以考虑进一步了解容器。如Infinispan repo所述:

ubi-minimal镜像。 因此,该镜像不提供Linux发行版中通常可用的所有工具。 以下是一些常见的有用于调试的工具/配方列表。

任务 命令
文本编辑器 vi
获取Java进程的PID ps -fC java
获取套接字/文件信息 lsof
列出所有打开的文件,但不包括网络套接字 lsof
列出所有TCP套接字 ss -t -a
列出所有UDP套接字 ss -u -a
网络配置 ip
显示单播路由 ip route
显示组播路由 ip maddress

0

你正在使用最小的基础镜像 (registry.access.redhat.com/ubi7/ubi-minimal)。你可以暂时切换到非最小的镜像 (registry.access.redhat.com/ubi7/ubi) 并在那里安装 iputils。


3
当我运行该基础镜像时,我可以轻松地执行 yum install iputils 然后使用 ping - undefined
构建镜像失败,yum iputils崩溃。 该系统未注册到授权服务器。您可以使用subscription-manager进行注册。 正在安装: iputils x86_64 20160308-10.el7 ubi-7 148 k

事务摘要

安装 1 个软件包总下载大小:148 k 已安装大小:335 k您的事务已保存,请使用以下命令重新运行: yum load-transaction /tmp/yum_save_tx.2020-05-30.19-51.hp0NDN.yumtx 命令'/bin/sh -c yum install iputils'返回了非零代码:1
- undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接