linux - 在 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
你能告诉我我做错了什么吗?
解决方案
用户appuser
在当前工作目录中没有写权限(/
,您可以使用 进行验证docker run --rm openjdk:8-jdk-alpine pwd
),并且您的应用程序似乎需要logs/
在该工作目录中创建一个目录。
可能的解决方案 :
- 将 设置为他
WORKDIR
可以在/tmp
/home/appuser
Dockerfile
--workdir /path/to/a/folder/where/appuser/can/write
您可以在发出docker run
命令时使用选项- 您可以创建
/logs
具有正确权限的文件夹(写入appuser
)
推荐阅读
- xml - 通过 BASH while 循环构造语法正确的 JSON 文件
- reactjs - 如何对无状态 Material-ui 组件进行单元测试?功能无法从外部访问
- bash - Bash for 循环跳过数组的第一个元素
- c# - 尝试从 gridview 更新时出现死锁错误
- angular - angular ng serve 命令抛出错误:发生未处理的异常:项目不存在
- linux - 尝试运行 bash 脚本时出现“找不到命令”
- python-3.x - 如何使用 pycharm 在生产模式下发布应用程序?
- automation - Cypress 获取属性值并存储在变量中
- python-3.x - 将 UTC 日期时间列转换为 IST 数据时间
- bash - 使用 bash 命令一次下载所有 gitlab 项目