在 Docker 容器中开发时如何管理权限?

2024-01-01

在Linux上的Docker容器中进行开发时,存在一个权限问题:如何管理主机和容器之间的文件所有权和权限。

想象一下,我有一个运行 Ubuntu 的 Docker 映像和一个 Apache 服务器。使用 Apache(最新版本)的默认设置,文档根目录将为/var/www/htmlApache 将作为www-data user.

为了进行一些开发,我通过 Docker 公开文档根目录-v /path/to/my/files:/var/www/html。这就是问题出现的地方:

文件在/path/to/my/files归容器所有www-data用户。如果我很幸运并且我的主人有www-datauser,就是那个用户;否则,它将是容器本地的不同用户。这些文件的权限(可能)是0755.

所以,当我以自己的身份工作时(一位名为jsmith),由于文件权限和所有权不正确,我无法编辑这些文件。

  • 我可以将文件的所有权更改为jsmith,但这会导致 Apache 出现问题 - 它将难以访问文档根目录中的文件。

  • 我可以将权限更改为0777,但我在工作过程中创建的任何新文件都将归jsmith.

最终的结果是需要不断调整开发文件的所有权和权限。其他人肯定也有这个问题,但我看到的每一篇关于在开发工作流程中使用 Docker 的帖子都忽略了这个问题。

I do有一个解决方案,但我对此并不完全满意:

  • 我在以下位置设置了一个文件夹/src/myproject。这保存了我的开发文件,所有者为www-data:www-data.

  • Using BindFS http://bindfs.org/,我安装/src/myproject at ~/myproject, 映射www-data:www-data to jsmith:jsmith。这允许我编辑文件~/myproject无需搞乱权限。

  • Apache Docker 容器挂载/src/myproject目录与-v /src/myproject:/var/www/html。阿帕奇看到www-data文件的所有权并且没有问题。

这运作良好,但似乎过于复杂。其他人如何解决这个问题?


我意识到我很可能为时已晚,但这可能对某人有帮助。

在你的 Dockerfile 中,你可以这样做:

RUN usermod -u 1000 www-data
RUN groupmod -g 1000 www-data

这在某些设置中可能有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Docker 容器中开发时如何管理权限? 的相关文章

  • Docker - 如何在 postgres 容器中运行 psql 命令?

    我想在 postgres 映像中使用 psql 以便对数据库运行一些查询 但不幸的是 当我附加到 postgres 容器时 我收到错误 psql 命令未找到 对我来说 如何在容器中运行 postgresql 查询或命令是一个谜 如何在pos
  • 在 Linux 中重新启动时,新创建的文件变为 0 kb(数据被覆盖为空)

    我遇到了一个奇怪的问题 这让我发疯 当前的任务是在 root 用户第一次登录时启动一组文件 并在同一用户第二次登录时启动另一组文件 我决定使用 profile 和 bashrc 文件 并在第一次登录期间发生的任务结束时重新加载 bashrc
  • 确定 docker 镜像的操作系统分布

    我需要确定任何 docker 映像的操作系统发行版名称 我可以标记ubuntu 最新 as 图片1 最新 但我应该能够在启动时获取 image1 latest 的分发信息 为了实现这一点 我使用下面提到的命令来确定操作系统版本 docker
  • MySQL 与 PHP 的连接无法正常工作

    这是我的情况 我正在尝试使用 Apache 服务器上的 PHP 文件连接到 MySQL 数据库 现在 当我从终端运行 PHP 时 我的 PHP 可以连接到 MySQL 数据库 使用 php f file php 但是当我从网页执行它时 它只
  • 链接错误:命令行中缺少 DSO

    我对 Linux 使用 Ubuntu 14 04 LTS 64 位 相当陌生 来自 Windows 并且正在尝试移植我现有的 CUDA 项目 当通过链接时 usr local cuda bin nvcc arch compute 30 co
  • python:PyPi公共模块:如何确定是否安全?

    我已经完成了我的 python 3 应用程序 它正在使用 PyPi 的多个公共模块 然而 在我将其部署到我公司的企业 将处理客户的凭据并访问第 3 方 API 之前 我需要尽职调查确保它们既安全又安全 我必须执行哪些步骤 验证 PyPi 模
  • 如何在 Linux 和 C 中使用文件作为互斥体?

    我有不同的进程同时访问 Linux 中的命名管道 并且我想让此访问互斥 我知道可以使用放置在共享内存区域中的互斥体来实现这一点 但作为一种家庭作业 我有一些限制 于是 我想到的是对文件使用锁定原语来实现互斥 我做了一些尝试 但无法使其发挥作
  • 无法使用 Django 应用程序从容器连接到 MySQL docker 容器

    当我尝试从运行 Django 应用程序的 docker 容器连接到运行 MySQL 的容器时 出现以下错误 django db utils OperationalError 2003 Can t connect to MySQL serve
  • 正则表达式删除块注释也删除 * 选择器

    我正在尝试使用 bash 从 css 文件中删除所有块注释 我有以下 sed 命令的正则表达式 sed r s w s w d 这可以很好地去除块注释 例如 This is a comment this is another comment
  • Linux无法删除文件

    当我找到文件时 我在删除它们时遇到问题 任务 必须找到带有空格的文件并将其删除 我的尝试 rm find L root grep i 但我有错误 rm cannot remove root test No such file or dire
  • 为什么 fork 炸弹没有使 android 崩溃?

    这是最简单的叉子炸弹 我在许多 Linux 发行版上执行了它 但它们都崩溃了 但是当我在 android 终端中执行此操作时 即使授予后也没有效果超级用户权限 有什么解释为什么它没有使 Android 系统崩溃吗 一句话 ulimit Li
  • 无法使用 docker build 运行 gradle 包装器

    我有这个小构建 FROM eclipse temurin 17 jdk as build java COPY java project root project WORKDIR root project RUN chmod x gradle
  • awk 在循环中使用时不打印任何内容[重复]

    这个问题在这里已经有答案了 我有一堆使用 file 1 a 1 txt 格式的文件 如下所示 A 1 B 2 C 3 D 4 并使用以下命令添加包含每个文件名称的新列 awk print FILENAME NF t 0 file 1 a 1
  • 无法从我的电脑上使用 traefik 后面的 gitlab 进行 git 克隆

    这是我的 gitlab 和 traefik 配置 version 3 7 services gitlab web image gitlab gitlab ce latest restart always hostname gitlab ro
  • ioctl 命令的用户权限检查

    我正在实现 char 驱动程序 Linux 并且我的驱动程序中有某些 IOCTL 命令仅需要由 ADMIN 执行 我的问题是如何在 ioctl 命令实现下检查用户权限并限制非特权用户访问 IOCTL 您可以使用bool capable in
  • 为什么 Linux 原始套接字的 RX 环大小限制为 4GB?

    背景 我试图mmap 我的原始套接字的 RX 环形缓冲区64 bitLinux 应用程序 我的环由 4096 个块组成 每个块大小为 1MB 总共 4GB 请注意 每个 1MB 块中可以有许多帧 如果您好奇 请参阅此文档了解背景信息 htt
  • 执行命令而不将其保留在历史记录中[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在进行软件开发时 经常需要在命令行命令中包含机密信息 典型示例是将项目部署到服务器的凭据设置为环境变量 当我不想将某些命令存储在命令历史记
  • Linux 中 m 标志和 o 标志将存储在哪里

    我想知道最近收到的路由器通告的 m 标志和 o 标志的值 从内核源代码中我知道存储了 m 标志和 o 标志 Remember the managed otherconf flags from most recently received R
  • 带有 npm 启动脚本的 Nodejs 应用程序

    我对nodejs很陌生 在我的docker化环境中 我想为nodejs应用程序提供appdynamics支持 这要求每个应用程序都要求将以下内容作为其应用程序的第一行 require appdynamics profile controll
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu

随机推荐