来自以 root 身份记录的 docker 容器的“不允许操作”

Posted

技术标签:

【中文标题】来自以 root 身份记录的 docker 容器的“不允许操作”【英文标题】:"Operation not permitted" from docker container logged as root 【发布时间】:2020-02-17 07:26:43 【问题描述】:

我需要你的帮助来理解我的问题。

上周我用 Catalina 更新了我的 macintosh,然后我更新了 docker for mac。

自从这些更新以来,我在共享卷上遇到了所有权问题。

我可以用一个小例子来重现。我只是创建了一个小型 docker-compose 来构建一个 nginx 容器。 我有一个文件夹 src,里面有一个像“src/index.php”这样的 PHP 文件。

我构建容器并启动它。 然后我去 /app/www/mysrc (共享卷)和磁带“ls -la”检查 index.php 是否正常,我得到:

ls: cannot open directory '.': Operation not permitted

这是一个简单的 docker-compose 文件: docker-compose.yml :

version: "3"

services:
  test-nginx:
    restart: always
    image: 'nginx:1.17.3'
    ports:
      - "8082:80"
    volumes:
      - ./src:/app/www/mysrc

当我构建并启动容器时,我得到:

$ docker-compose exec test-nginx sh
# cd /app/www
# ls -la
total 8
drwxr-xr-x 3 root root 4096 Oct 21 07:58 .
drwxr-xr-x 3 root root 4096 Oct 21 07:58 ..
drwxr-xr-x 3 root root   96 Oct 21 07:51 mysrc
# cd mysrc
# ls -la
ls: cannot open directory '.': Operation not permitted
# whoami
root

所以,我的 nginx 服务器宕机了,因为 nginx 无法访问源文件。

感谢您的帮助。

【问题讨论】:

【参考方案1】:

如果它在更新到 Catalina 之前可以正常工作,则问题是由于 Catalina 请求的新权限造成的。

现在,macOS 请求所有内容的权限,即使是访问目录也是如此。因此,您可能收到了有关授予 Docker for Mac 访问共享文件夹权限的通知,但您没有授予它,现在您正面临此类操作的结果。

要立即授予权限,请转到系统偏好设置 > 安全和隐私 > 文件和文件夹,然后添加 Docker for Mac 和您的共享目录。

【讨论】:

我输了一整天。我以为我在代码的某个地方有错误。原来这只是一项新的 Catalina 政策 拯救了我的一天!!祝福你! ?? 遗憾的是,您无法直接添加应用程序,直到它要求它。 apple.stackexchange.com/questions/376907/…discussions.apple.com/thread/250869415 您可以授予 Docker 全盘访问权限,这应该可以解决此问题,直到 Apple 决定允许我们选择一个文件夹来授予第 3 方访问权限。 Mac OS Big Sur 的 Docker Desktop 也是如此……浪费了 2 个小时。谢谢你。

以上是关于来自以 root 身份记录的 docker 容器的“不允许操作”的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Docker 容器中以非 root 用户身份启动 cron?

docker与gosu

以宿主机用户身份运行Docker容器

docker与gosu

在 Docker 中以非 root 用户身份运行应用程序

如何在 docker 中以非 root 用户身份写入卷容器?