gpt4 book ai didi

linux - 跨主机和 Docker 容器环境管理目录权限

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:09:20 24 4
gpt4 key购买 nike

我正在尝试使用由 Docker 容器构建的堆栈来运行 Symfony2 应用程序 ( SfDocker )。该堆栈由相互关联的容器组成,其中 ubuntu:14.04 是基础:

  • mysql数据库
  • nginx
  • php-fpm

我面临的反复出现的问题是管理容器内的目录权限。当我从主机安装 vloume 时,例如

volumes:   
- symfony-code:/var/www/app

安装的目录将始终由容器内的 root 或身份不明的用户(只有在运行 ls -al 时可见的用户 ID)拥有。

从本质上讲,这使得无法通过浏览器访问应用程序。当然在公共(public)目录上运行 chown -R root:www-data 解决了这个问题,但是一旦我想写信给例如来自主机的“缓存”目录(用户是ltarasiewicz)我会得到permission denied error。最重要的是,每当容器内运行的应用程序创建新目录(例如“日志”)时,它们再次归 root 所有,以后浏览器或我的桌面用户将无法访问。

所以我的问题是:

  1. 我应该如何跨主机和容器管理权限环境(当我想从两个容器上运行命令时环境)?
  2. 是否可以配置 Docker,以便作为卷安装的目录自动接收特定的所有权/权限(例如“root:www-data”)?
  3. 我是否可以在使用 Ubuntu:14.04 镜像构建的“nginx”容器中自由创建新用户和用户组?

最佳答案

一些一般性的要点,如果我没有直接回答你的问题,我深表歉意。

  • 不要在容器中以 root 身份运行。使用 USER 语句或在入口点或命令脚本中,在 Dockerfile 中创建一个用户并切换到该用户。查看Redis official image这是一个很好的例子。 (所以 Q3 的答案是肯定的,并且会这样做,但是通过 Dockerfile - 不要手动更改容器)。

  • 请注意,官方图片通常会显示 chown on volumes in the entrypoint script以避免您在 2 中描述的这个问题。

  • 考虑使用数据容器而不是直接链接到主机目录。查看official docs了解更多信息。

  • 不要从卷上的主机运行命令。只需创建一个临时容器来执行此操作或使用 docker exec(例如 docker run -v/myvol:/myvol myimage touch/myvol/x)。

关于linux - 跨主机和 Docker 容器环境管理目录权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30583514/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com