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