禁用docker映像中的shell访问



我是Docker的新手,需要使用一个精简的OpenJDK 17基本映像来创建Java web应用程序的映像,并禁用用户登录正在运行的容器的功能。

我曾尝试使用amazoncretto 17高山图像,据称该图像已禁用外壳访问。

FROM amazoncorretto:17-alpine3.15    
ENTRYPOINT ["java","-jar","/myapp.jar"]

但是,您仍然可以使用docker exec -it my-container sh登录到此映像创建的容器,这是我需要防止的。

实现这一目标的最佳方式是什么?提前谢谢。

最简单的方法是从容器中删除带有RUN rm /bin/shsh符号链接。

Alpine使用到busybox的链接来实现这些功能,可以删除这些链接来删除功能

# ls -l /bin/sh
lrwxrwxrwx 1 root  root 12 Aug  9 08:47 /bin/sh -> /bin/busybox

任何其他非必需的功能都可以以相同的方式禁用。

Busybox文档

BusyBox是一个多调用二进制文件,它结合了许多常见的Unix实用程序集成到单个可执行文件中。大多数人会创建一个链接对于他们想要使用的每个函数,busybox的行为就像无论它被调用为什么。

最新更新