我在使用运行 Spring 引导应用程序的 amazoncorretto-alpine 图像时遇到问题。 为了启动容器,我使用了一个特定的 bash 脚本(连同其他东西)尝试运行 Spring boot 应用程序的可执行 jar。
我需要以不同的用户运行可执行 jar,因此当 bash 脚本以 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 启动。
在以“root”权限运行的 bash 中,我使用此命令行与另一个用户一起执行 jar:
su - spring -c "java -jar springBoot.jar"
我通过将 -c “命令”放在用户之前做了一些其他测试,但错误始终相同:
"The Account is not available"
此消息在启动容器时打印在 Docker 控制台中。
图片中的Alpine版本:
"Alpine Linux v3.15"
注意:如果我删除上面的指令“su - spring...”并在 bash 脚本中运行 java -jar springBoot.jar 一切正常,但应用程序以 root 启动(正如预期的那样)。
有人知道可能是什么问题吗?
最佳答案
与其直接在 docker 文件中创建用户,不如尝试像这样在脚本中创建它
adduser -D spring -g "test" -s /bin/sh -D spring
然后切换用户
su -s /bin/bash spring <<EOF
java -jar java_file.jar
EOF
关于bash - Docker Alpine 以另一个用户身份执行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71557316/