首页 > 解决方案 > 在 Docker 上以非 root 用户身份运行 JAR 的权限错误

问题描述

我确实写了以下 Dockerfiler:

FROM openjdk:8-jdk-alpine

RUN addgroup -g 999 -S appgroup && \
     adduser -u 999 -S appuser -G appgroup
USER appuser

COPY myapp.jar /usr/app/myapp.jar 

ENTRYPOINT ["java","-jar","/usr/app/myapp.jar"]  

当我运行图像时,出现以下错误:

main ERROR Unable to create file logs/file.log java.io.IOException: Could not create directory /logs

你能告诉我我做错了什么吗?

标签: linuxdockeralpine

解决方案


用户appuser在当前工作目录中没有写权限(/,您可以使用 进行验证docker run --rm openjdk:8-jdk-alpine pwd),并且您的应用程序似乎需要logs/在该工作目录中创建一个目录。

可能的解决方案 :

  • 将 设置为他WORKDIR可以在/tmp/home/appuserDockerfile
  • --workdir /path/to/a/folder/where/appuser/can/write您可以在发出docker run命令时使用选项
  • 您可以创建/logs具有正确权限的文件夹(写入appuser

推荐阅读