Docker Secrets挂载文件时mode/uid/gid不生效问题排查
问题原因及解决方案
Docker Secrets的uid/gid/mode配置仅在Swarm集群模式下生效,你当前使用普通单机docker compose up部署时,这些参数会被Docker忽略——这不是Bug,是对文档场景的理解偏差。
文档示例的隐含前提
你参考的文档示例中,Redis服务包含deploy: replicas: 1配置,这是Swarm模式专属的部署语法,说明示例针对的是Swarm环境,而非单机Compose环境。
解决方法
方法1:切换到Swarm模式部署
- 初始化Swarm(单机节点也可运行):
docker swarm init
- 使用Swarm栈部署配置:
docker stack deploy -c docker-compose.yml secret-test-stack
- 查看容器内文件权限:
docker exec -it $(docker ps -q -f name=secret-test-stack_test) ls -alh /root
此时uid/gid/mode会按配置生效。
方法2:单机环境下手动修改权限
如果不想启用Swarm,可在容器启动命令中添加权限修改步骤,修改后的docker-compose.yml如下:
version: "3.9" services: test: image: busybox:latest secrets: - source: secret_file target: /root/mysecretfile command: sh -c "chown 101:101 /root/mysecretfile && chmod 0400 /root/mysecretfile && ls -alh /root" secrets: secret_file: file: ./docker-compose.yml
运行docker compose up即可看到权限已变更。
补充说明
你的Docker版本(20.10.17)符合这个规则,目前Docker单机Compose仍不支持Secrets的权限/所有者配置,仅Swarm模式支持该特性。
内容的提问来源于stack exchange,提问作者DevilaN
相关产品推荐
相关产品推荐

