Docker部署Wildfly 20时挂载的deployments目录不可访问致EAR无法部署
问题原因
官方jboss/wildfly:20.0.1.Final镜像默认使用UID为185的jboss用户运行Wildfly进程,而你挂载的Docker命名卷vol_wildfly对应容器内目录的属主UID为1000,jboss用户没有该目录的读写权限,导致部署扫描器无法访问deployments目录,抛出WFLYDS0043报错。
你登录容器时默认使用root身份,因此可以正常查看、操作目录内的文件,但Wildfly运行身份无权限,所以即使手动创建doDeploy文件也无法触发部署。通过控制台上传的文件会自动继承jboss用户的权限,因此可以正常部署。
解决方案
可以任选以下一种方法修复权限问题:
- 方案1:修改Docker Compose启动逻辑,先修正目录权限再启动Wildfly
在docker-compose.yml的wildfly服务下新增user: root配置,修改启动命令先调整目录属主再启动服务,配置示例如下:version: '3.7' services: wildfly: image: image-wildfly:latest container_name: cont_wildfly user: root networks: - net1 command: sh -c "chown -R jboss:root /opt/jboss/wildfly/standalone/deployments && su jboss -c '/opt/jboss/wildfly/bin/standalone.sh -bmanagement 0.0.0.0 -b 0.0.0.0'" ports: - "8080:8080" - "9990:9990" volumes: - vol_wildfly:/opt/jboss/wildfly/standalone/deployments # 其余网络、卷配置保持不变 - 方案2:修改Dockerfile,预先给部署目录配置兼容权限
在原有Dockerfile末尾新增权限修正指令,让目录支持任意UID的用户访问,适配容器挂载卷场景:
重新构建镜像后启动即可正常识别挂载卷内的部署文件。FROM jboss/wildfly:20.0.1.Final RUN /opt/jboss/wildfly/bin/add-user.sh admin admin ManagementRealm ADD ./standalone.xml /opt/jboss/wildfly/standalone/configuration/ # 新增以下权限配置 RUN mkdir -p /opt/jboss/wildfly/standalone/deployments \ && chgrp -R 0 /opt/jboss/wildfly/standalone/deployments \ && chmod -R g=u /opt/jboss/wildfly/standalone/deployments - 方案3:将卷属主修改为Wildfly运行用户UID
如果你使用宿主机绑定挂载(而非命名卷),可以直接在宿主机执行chown -R 185:root /宿主机部署目录路径修改目录属主后再挂载即可。
内容的提问来源于stack exchange,提问作者ps0604
相关产品推荐
相关产品推荐

