You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Rex-Ray S3外部卷的Docker Compose部署PostgreSQL/PGAdmin失败排查

解决Docker Compose中Rex-Ray S3FS卷无法同步PostgreSQL/PGAdmin数据的问题

从你的描述来看,手动挂载卷到CentOS容器能正常同步S3,但Compose中的PostgreSQL和PGAdmin却不行,最可能的原因是容器内进程的权限与卷的默认权限不匹配,导致无法写入数据到S3卷。

问题分析

手动用centos容器测试时,你是以root用户操作的,而PostgreSQL和PGAdmin容器默认使用非root用户运行:

  • PostgreSQL容器默认使用postgres用户(UID/GID 999)
  • PGAdmin 4容器默认使用pgadmin用户(UID/GID 5050)

Rex-Ray S3FS创建的卷默认权限是root:root,容器内的非root用户没有写入权限,所以数据无法被写入到S3卷中,自然在S3桶里看不到内容。

解决方案

你需要在创建Rex-Ray卷时,指定挂载选项,将卷的权限映射到容器内运行的用户UID/GID,具体步骤如下:

1. 删除现有卷(如果已创建)

docker volume rm myrexvol1-1234 myrexvol2-1234

2. 重新创建卷,指定匹配容器用户的UID/GID

针对PGAdmin的卷(匹配UID/GID 5050):

docker volume create --driver rexray/s3fs:0.11.4 \
  --opt s3fsopts="uid=5050,gid=5050,allow_other" \
  myrexvol1-1234

针对PostgreSQL的卷(匹配UID/GID 999):

docker volume create --driver rexray/s3fs:0.11.4 \
  --opt s3fsopts="uid=999,gid=999,allow_other" \
  myrexvol2-1234

这里的s3fsopts参数:

  • uid=xxx/gid=xxx:将卷的所有者设置为容器内用户的UID/GID
  • allow_other:允许其他用户访问该卷,确保容器内进程能正常读写

3. 重启Docker Compose服务

docker-compose down
docker-compose up -d

验证方法

  • 查看容器日志,确认没有权限错误:
    docker logs databasecontainer
    docker logs pgadmincontainer
    
  • 进入PostgreSQL容器,尝试写入数据到卷目录:
    docker exec -it databasecontainer bash
    cd /var/lib/postgresql/data
    touch test-file
    
    然后检查S3桶,应该能看到同步的test-file。

额外排查点

如果问题仍存在,可以查看Rex-Ray插件的日志,排查挂载或写入错误:

docker plugin logs rexray/s3fs:0.11.4

内容的提问来源于stack exchange,提问作者user1665355

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 10:58:16