Docker Alpine 以另一个用户身份执行命令

Docker Alpine execute command as another user

我在使用 amazoncorretto-alpine 图像时遇到问题,我在该图像上 运行 Spring 启动应用程序。 为了启动容器,我使用了一个特定的 bash 脚本,该脚本(连同其他东西)尝试 运行 Spring 启动应用程序的可执行 jar。

我的需要是 运行 不同用户的可执行 jar,所以当 bash 脚本 运行s 与 root "java -jar springBoot.jar”必须作为“spring”用户执行。

在 docker 文件中创建了一个用户和一个组,并为 springBoot.jar 授予了权限,如下所示:

...
RUN addgroup -S spring && adduser -S -D spring -G spring
RUN chown spring:spring springBoot.jar
...
CMD ["myBash.sh"]

用户和组存在,文件权限配置正确,容器通过执行 myBash.sh.

启动

在 bash 中,运行 具有“root”权限,我正在使用此命令行与另一个用户一起执行 jar:

su - spring -c "java -jar springBoot.jar"

我通过将 -c “命令”放在用户之前做了一些其他测试,但错误总是相同的:

"The Account is not available"

此消息在启动容器时打印在 Docker 控制台中。

图中的Alpine版本:

"Alpine Linux v3.15"

注意:如果我删除上面的指令“su - spring....”,只 运行 java -jar springBoot.jar bash 脚本一切正常,但应用程序是用 root 启动的(如预期的那样)。

有人知道问题出在哪里吗?

您可以在 Dockerfile 上指定一个 USER。 您将在上面的 link 中找到所有文档。

https://docs.docker.com/engine/reference/builder/#user

但我认为对于您的用例,您只需要在 Dockerfile 中指定如下内容:

FROM alpine
RUN addgroup -S sprig && adduser -S -D spring -G spring
USER spring
#here you put your commands
#if you want to leave the container as an non-root user which is recommanded you then just
USER 1001

不要直接在 docker 文件中创建用户,而是尝试像这样在脚本中创建它

adduser -D spring -g "test" -s /bin/sh -D spring

然后切换用户

su -s /bin/bash spring  <<EOF
java -jar java_file.jar
EOF