Quarkus Jib使用自定义entrypoint脚本运行容器报权限错误如何解决
问题原因
报错核心是镜像内的/docker/run-java.sh脚本缺少可执行权限,Quarkus Jib扩展本身支持自定义文件权限,无需依赖原生Maven Jib插件的额外配置。
解决方案
方案一:通过Quarkus配置直接指定脚本权限
在application.properties中新增权限配置即可,Quarkus Jib会在构建镜像时自动为对应路径设置指定权限:
# 为自定义entrypoint脚本设置755权限(所有者可读可写可执行,其他用户可读可执行) quarkus.jib.permissions."/docker/run-java.sh"=755
原有配置无需修改,重新构建镜像部署即可生效。
方案二:修改entrypoint调用方式,绕过执行权限校验
无需修改文件权限,直接调整entrypoint为用shell解释器执行脚本即可,修改原有entrypoint配置为:
quarkus.jib.jvm-entrypoint=/bin/sh,/docker/run-java.sh quarkus.jib.environment-variables."JAVA_APP_DIR"=/work
这种方式适配性更强,不受跨平台文件权限丢失的问题影响。
方案三:本地预先设置脚本可执行权限
在本地开发环境为src/main/jib/docker/run-java.sh添加可执行权限后再构建镜像:
# Linux/macOS环境执行 chmod +x src/main/jib/docker/run-java.sh
Jib默认会保留本地文件的权限属性到镜像内,该方案不适合Windows开发环境,容易出现跨平台权限丢失问题。
注意事项
如果脚本开头定义了shebang,需要确保镜像内存在对应的解释器,比如shebang为#!/bin/bash时,基础镜像需要预装bash,否则也会触发类似执行失败报错。
内容的提问来源于stack exchange,提问作者Bożek Mariusz
相关产品推荐
相关产品推荐

