Linux 在Docker上以非根用户身份运行JAR时出现权限错误

Linux 在Docker上以非根用户身份运行JAR时出现权限错误,linux,docker,alpine,Linux,Docker,Alpine,我确实写了以下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"] 运行图像时,会出现以下错误:

我确实写了以下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

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

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

可能的解决办法:

  • WORKDIR
    设置为他可以在
    Dockerfile
    中写入的位置(例如
    /tmp
    ,或者
    /home/appuser
    (如果已创建)
  • 在发出
    docker run
    命令时,您可以使用选项
    --workdir/path/to/a/folder/where/appuser/can/write
  • 您可以使用正确的权限创建
    /logs
    文件夹(为
    appuser
    编写)

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

可能的解决办法:

  • WORKDIR
    设置为他可以在
    Dockerfile
    中写入的位置(例如
    /tmp
    ,或者
    /home/appuser
    (如果已创建)
  • 在发出
    docker run
    命令时,您可以使用选项
    --workdir/path/to/a/folder/where/appuser/can/write
  • 您可以使用正确的权限创建
    /logs
    文件夹(为
    appuser
    编写)