代码之家  ›  专栏  ›  技术社区  ›  SCB

为了更改卷权限,这两个docker版本之间发生了什么变化?

  •  0
  • SCB  · 技术社区  · 7 年前

    docker-compose.yml 看起来是这样的:

    version: '2'
    services:
      foo:
        image: node:11
        volumes:
          - ".:/usr/src"
        working_dir: "/usr/src"
    # ...
    

    在我的mac电脑上,我有Docker 18.09。在我们的jenkins构建服务器上,我有Docker 1.10。

    docker-compose run foo mkdir hello
    

    在mac上,它创建了一个拥有我的用户所有权的文件夹,在构建服务器上,它创建了一个拥有root用户所有权的文件夹。如果我跑 ls -l

    ls -l # After folder created with Docker 18.09 on Mac
    ...
    drwxr-xr-x   2 my_user       my_group      64 Dec 19 00:10 hello
    ...
    
    ls -l # After folder created with Docker 1.10 on Jenkins machine
    ...
    drwxr-xr-x   2 root          root          64 Dec 19 00:10 hello
    ...
    

    我知道在早期版本中,目录是使用docker的 root 帐户,并被授予具有的权限 uid gid 0。我不明白的是,为什么在更现代的版本中不再发生这种情况。

    我尝试过/忽略了一些解决方法:

    我在网上看到了很多建议设置 user 将compose中的字段设置为主机上用户的id。不幸的是,这会导致某些脚本出现权限问题,这些脚本似乎希望以root用户身份运行,并且不是特别可移植的。

    此外,不幸的是,我们暂时无法在本地计算机上升级Docker版本,因此该解决方案需要在V1.10上可用,并且对Docker引擎的其他用户的影响尽可能小(我认为这让用户名称空间变得有点困难,但我并不完全理解它们,所以我可能弄错了)。

    1 回复  |  直到 7 年前
        1
  •  1
  •   BMitch    7 年前

    使用MacOS,您可以使用osxfs,它以一种对用户装载卷相对透明的方式映射文件权限:

    https://docs.docker.com/docker-for-mac/osxfs/

    https://github.com/sudo-bmitch/docker-base

    如果您在容器中以root用户身份运行应用程序,那么它将在Linux上以root用户身份在卷中创建文件。我不知道有什么简单的解决办法。