Quarkus应用Docker化时Maven资源插件报操作不允许错误
解决Quarkus容器化编译时的权限错误问题
问题原因
你遇到的Operation not permitted错误,根源是USER 185对容器内的/src目录没有写入权限:
- 原Dockerfile中,
WORKDIR /src是在root用户上下文执行的,所以/src目录的所有者是root - 切换到USER 185后,执行
COPY . .只是复制文件,但/src本身的权限并未开放给185用户 - 当
mvnw compile尝试创建/src/target目录并写入application.yaml时,因权限不足失败
解决方案
方案1:提前设置目录权限
修改Dockerfile,先以root用户为USER 185配置/src目录的写入权限,再切换用户:
FROM adoptopenjdk/openjdk17:ubi WORKDIR /src # 将目录所有权转移给USER 185 RUN chown -R 185:185 /src USER 185 COPY . . CMD ["./mvnw","compile","quarkus:dev"]
方案2:复制文件时直接指定所有者
利用Docker的COPY --chown参数,在复制文件时直接将文件和目录的所有权设置为USER 185:
FROM adoptopenjdk/openjdk17:ubi WORKDIR /src # 复制时指定所有者为185 COPY --chown=185:185 . . USER 185 CMD ["./mvnw","compile","quarkus:dev"]
补充说明
Quarkus默认生成的Dockerfile.jvm是先在本地打包好应用,再将编译产物复制到容器中,因此不需要在容器内执行编译操作,自然不会触发权限问题。如果要保留容器内编译开发的模式,必须确保运行用户对工作目录拥有完整的读写权限。
内容的提问来源于stack exchange,提问作者Sergio Agüero
相关产品推荐
相关产品推荐

