【问题标题】:Restricting file access of Docker container限制 Docker 容器的文件访问
【发布时间】:2014-10-06 14:39:21
【问题描述】:

假设我在 Docker 容器中有 NodeJS 应用程序。 NodeJS 可以使用fs 模块与主机的文件系统进行交互。我想要的是只允许它访问一个文件夹(例如,/home/user1/thisfolder),并拒绝读取/写入我主机上的任何其他文件夹或文件。有没有办法在 Docker 中限制这种访问?

UPD 得到答案: 使用 AppArmor 我可以让node 进程只访问给定目录,当它尝试访问任何其他目录时 - 它会得到permission denied

【问题讨论】:

  • 只是为了确保我理解你的问题。你想让你的 docker 容器访问你主机上的特定目录吗?
  • 如果这意味着我在这个容器中的 NodeJS 代码也可以访问我主机上的特定目录 - 那么是的,这就是我想要的。

标签: node.js file-permissions docker


【解决方案1】:

您要使用的解决方案是使用 -v 选项在容器上安装卷。

docker run -v /path/to/directory/on/your/host:/path/to/directory/on/your/container image CMD

它会让你访问你的音量。

更多信息:https://docs.docker.com/userguide/dockervolumes/

如果您想限制对容器其他部分的访问,您应该从容器外部使用 Apparmor。

【讨论】:

  • 感谢您的提示,它对我有所帮助。但我需要限制对除此文件夹之外的其他文件夹的访问。例如,在 nodejs 代码中,我可以执行 data = fs.readFileSync('./file1.txt','utf-8') 并将文件内容接收到我的变量 data 中——没关系。但是像data = fs.readFileSync('/var/lib/anyfilehere.txt','utf-8') 这样的东西应该被限制(抛出异常什么的)。
  • 我认为最好的方法是使用 Apparmor。但这不是我的专长。
  • AppArmor 完美解决了我的问题。谢谢!
  • 我建议您编辑您的问题以添加您是如何做到的。
【解决方案2】:

Docker 无权访问主机文件系统,除非您:

  • 映射某个卷的路径(如上面的@Regan 建议的那样)
  • 以特权模式运行

所以,默认情况下,docker 正在做你想做的事。

【讨论】:

    猜你喜欢
    • 2017-02-16
    • 1970-01-01
    • 2018-04-28
    • 2018-01-30
    • 2022-11-02
    • 2016-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多