我是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/sh
的sh
符号链接。
Alpine使用到busybox的链接来实现这些功能,可以删除这些链接来删除功能
# ls -l /bin/sh
lrwxrwxrwx 1 root root 12 Aug 9 08:47 /bin/sh -> /bin/busybox
任何其他非必需的功能都可以以相同的方式禁用。
Busybox文档
BusyBox是一个多调用二进制文件,它结合了许多常见的Unix实用程序集成到单个可执行文件中。大多数人会创建一个链接对于他们想要使用的每个函数,busybox的行为就像无论它被调用为什么。