java 如何将用户添加到具有有限只读权限的Docker镜像?

vqlkdk9b  于 2023-10-14  发布在  Java
关注(0)|答案(1)|浏览(112)

我的目标是配置Docker镜像,我将通过无根用户使用它,这个用户只能读取jar文件。
我在Dockerfile中做了什么:

...something...
ARG USERNAME=MyCustomUser
ARG USER_UID=10001
ARG USER_GID=$USER_UID

RUN groupadd --gid $USER_GID $USERNAME \
    && useradd --uid $USER_UID --gid $USER_GID -m $USERNAME \
...something...

但是我如何在文件系统中只配置jar文件的读取权限呢?

wj8zmpe1

wj8zmpe11#

不要在容器中安装任何其他东西。容器运行在受限环境中,通常无法访问容器外的文件(Docker强制),因此您不需要专门设置权限或禁止其他事情。
假设Dockerfile只包含:

FROM eclipse-temurin:17
RUN adduser --system custom
WORKDIR /app
COPY ./target/app.jar ./
USER custom
CMD ["java", "-jar", "app.jar"]

映像中除了一组基本工具、JVM和jar文件之外没有其他内容,因此您不能在容器中执行其他操作。此外,jar文件归root所有,但容器(默认情况下)以非root用户身份运行,因此您无法覆盖映像中的任何内容。
容器中的用户名和ID通常不需要匹配任何特定的主机用户,在这个例子中,我选择了一个固定的名称,让adduser(8)为我选择ID。如果需要不同的用户ID(例如,写入绑定挂载的主机目录),可以在运行容器时指定数字用户ID。您不需要“创建用户”* 本身 *,并且您不希望仅仅因为其他人正在运行它而重新构建映像。不要尝试将用户ID作为构建时ARG传递。

相关问题