【问题标题】:docker-compose config : "mode" does not match permission within the containerdocker-compose config:“模式”与容器内的权限不匹配
【发布时间】:2021-03-29 06:42:18
【问题描述】:

我对使用 config 时 docker + compose(在 swarm 环境中)的奇怪行为感到困惑。

基本上,我有这个设置:

version: '3.6'

configs:
   users777.xml:
     file: "./users.xml"
   users666.xml:
     file: "./users.xml"
   users644.xml:
     file: "./users.xml"
   users444.xml:
     file: "./users.xml"
   users400.xml:
     file: "./users.xml"


services:
   ubuntu:
     image: ubuntu:18.04
     configs:
     - source: users777.xml
       target: /app/geoserver/data/security/usergroup/default/users777.xml
       uid: '10000'
       gid: '10000'
       mode: 777
     - source: users666.xml
       target: /app/geoserver/data/security/usergroup/default/users666.xml
       uid: '10000'
       gid: '10000'
       mode: 666
     - source: users644.xml
       target: /app/geoserver/data/security/usergroup/default/users644.xml
       uid: '10000'
       gid: '10000'
       mode: 644
     - source: users444.xml
       target: /app/geoserver/data/security/usergroup/default/users444.xml
       uid: '10000'
       gid: '10000'
       mode: 444
     - source: users400.xml
       target: /app/geoserver/data/security/usergroup/default/users400.xml
       uid: '10000'
       gid: '10000'
       mode: 400
     command: tail -F anything

我希望“模式”是生成容器中的确切结果... 因此,我启动了堆栈(docker stack deploy...)...并注意到它不是:

root@2af60b451971:/app/geoserver/data/security/usergroup/default# ll
total 28
-rw--w---- 1 10000 10000  285 Dec 18 15:26 users400.xml
-rw-rwxr-- 1 10000 10000  285 Dec 18 15:26 users444.xml*
--w----r-- 1 10000 10000  285 Dec 18 15:26 users644.xml
--w--wx-w- 1 10000 10000  285 Dec 18 15:26 users666.xml*
-r----x--x 1 10000 10000  285 Dec 18 15:26 users777.xml*

我的帮助的一些信息:

  • 容器内的 umask(如果它是问题的一部分)是“0022”。
  • 我已尝试将源文件 (./users.xml) 权限从 444 更改为 666,最高为 777:此处没有更改
  • 容器内的目录不存在,因此由配置设置创建。
  • Docker 版本 19.03.6,构建 369ce74a3c
  • docker-compose 版本 1.21.0,构建未知
  • 我在 2 个不同的主机上尝试过,结果相同:Ubuntu 19.10 和 RHEL 7.4
  • 容器以“root”身份运行,但我也尝试使用以用户 10000 身份运行的容器,结果相同

doc 似乎没有回答这里的“为什么”(或者不是以我理解的方式)。

这可能很明显,但我可能需要在这里做一些解释。有人吗?

【问题讨论】:

    标签: docker docker-compose docker-swarm rights


    【解决方案1】:

    实际上,如果您在模式值中添加前导 0,则它可以正常工作:

    400 -> 0400
    444 -> 0444
    644 -> 0644
    666 -> 0666
    777 -> 0777
    

    我更正了您的 compose.yml 的模式并将其部署为堆栈“配置”。权限掩码符合预期:

    me:~$ docker exec -ti $(docker ps -q --filter name=config_ubuntu) ls -l /app/geoserver/data/security/usergroup/default
    total 20
    -r-------- 1 10000 10000 5 Dec 19 21:06 users400.xml
    -r--r--r-- 1 10000 10000 5 Dec 19 21:06 users444.xml
    -rw-r--r-- 1 10000 10000 5 Dec 19 21:06 users644.xml
    -rw-rw-rw- 1 10000 10000 5 Dec 19 21:06 users666.xml
    -rwxrwxrwx 1 10000 10000 5 Dec 19 21:06 users777.xml
    

    不过,请记住,配置和机密始终以只读方式挂载!

    【讨论】:

    • 太明显了!非常感谢您指出我的误解:您拯救了我的一周!
    猜你喜欢
    • 2019-11-21
    • 2017-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多