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

标签 bash spring-boot docker docker-swarm alpine-linux

我在使用运行 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/

相关文章:

performance - Spring Boot在Raspberry PI上启动缓慢

docker - 更改 amazon/dynamodb-local 端口

macos - Docker BuildKit --mount=type=cache 不起作用,为什么?

ssh - 禁用从 docker 容器到其主机的 SSH 访问

bash - 如何在 Tramp emacs ssh session 中记录历史记录

bash - 如何在 Bash 中获取文件名的通配符部分

linux - 如何打印文件名从...到

linux - bash 查找带有整数的行直到下一个字符串

spring - 跨 Camel 上下文的全局异常处理程序——覆盖所有路由

java - StaxEventItemReader 中的 ClassCastException