问题
我的 docker-compose 堆栈由“postgresql”、“redis”和“Python api server”以及其他一些如 opentracing 等组成,但问题区域仅限于前面提到的。
我的撰写文件中的入口点是一个 shell 脚本,它通过读取环境变量以及它应该做的其他事情来动态创建一些文件和文件夹。现在,这些文件的创建就像一个魅力,但这些动态生成的文件的文件和文件夹权限变得有趣。在 macos 上,这些动态生成的文件和文件夹由运行docker-compose up. 但是,在运行 Ubuntu 19.01 的 Linux 机器上,root尽管 Dockerfile 显式chown non-root-user:non-root-group地对整个项目的文件夹执行 a并将活动用户设置为这些文件和文件夹non-root-user
postgres 容器将自己安装到给定的路径上,但该目录的所有者不再是创建它的人,但有些奇怪,systemd-coredump我猜这是因为 Postgres 的 Dockerfile 上的用户 ID 和组映射到我的 linux 服务器上的这个用户名?如果是,推荐的避免这种情况的方法是什么?
由于运行的非 root 用户docker-compose up无法保留主机上的文件和文件夹权限,因此我遇到了permission denied问题。虽然 achmod 777有助于解决问题,但我相信 chmod 777 从未真正解决任何问题。
重申所有这些仅在 Linux 机器上存在问题。在运行 Docker-For-Mac 的 Macos 上,预先存在的和动态生成的文件/文件夹都将非 root 登录用户保留为其所有者并在容器内,Dockerfile 中指定的 USER 仍然是所有预先存在的(那些通过COPY) 和新生成的动态文件/文件夹传输。
例子
文件和文件夹所有权更改的示例:
drwxrwxr-x 13 sparkle_deployment_2 sparkle_deployment_2 …Run Code Online (Sandbox Code Playgroud) linux file-permissions permission-denied docker docker-compose