执行docker compose up启动RabbitMQ时报权限错误无法写入pid文件如何解决
问题根因
错误是容器内运行RabbitMQ进程的用户,对宿主机挂载到容器内的/mnesia目录没有读写权限导致的。你在配置中指定了容器运行用户为${HOST_DOCKER_UID},但宿主机的挂载目录/media/data/ampq/gmpqueue的属主/权限和该UID不匹配,所以无法写入pid文件。
解决方案
可任选以下一种方案操作:
方案1:修改宿主机挂载目录属主(生产环境推荐)
- 先查询你配置的UID值,在宿主机执行命令:
echo $HOST_DOCKER_UID - 假设输出的UID为1001,执行以下命令修改目录属主:
sudo chown -R 1001:1001 /media/data/ampq/gmpqueue
如果你没有配置HOST_DOCKER_UID环境变量,RabbitMQ官方alpine镜像默认运行用户UID为999,可直接执行:sudo chown -R 999:999 /media/data/ampq/gmpqueue
- 先查询你配置的UID值,在宿主机执行命令:
方案2:放开目录权限(仅测试环境使用)
直接给挂载目录开放所有读写权限,命令如下:sudo chmod -R 777 /media/data/ampq/gmpqueue
注意:该方案权限宽松,禁止在生产环境使用方案3:调整docker-compose配置
可以去掉user: ${HOST_DOCKER_UID}配置项,新增privileged: true参数给容器赋权,修改后的ampq服务配置参考:ampq: networks: - ampq_gmp volumes: - /media/data/ampq/gmpqueue:/mnesia privileged: true environment: RABBITMQ_MNESIA_BASE: /mnesia
验证
配置修改完成后,重新执行启动命令即可:docker-compose -f docker-compose.yml up --build ampq
内容的提问来源于stack exchange,提问作者denya
相关产品推荐
相关产品推荐

