如何使用 lebokus/docker-volume-bindfs 插件将我的主机映射到 docker-compose 中容器的用户?

如何使用 lebokus/docker-volume-bindfs 插件将我的主机映射到 docker-compose 中容器的用户?

我通过 Dockerfiles 和 docker-compose 设置了 php 开发堆栈。我将源树和作曲家供应商文件夹安装到容器中。我的主机的本地用户philipp有 id 1000,我的容器使用www-data带有用户 id 的用户33

为了映射已安装卷的 ID,我安装了lebokus/docker-volume-bindfs插入:

docker plugin install lebokus/bindfs

现在我的 docker-compose.yml 中有一个服务定义:

  php-fpm:
    container_name: professionalworks
    build:
      context: .
      dockerfile: ./docker/php/Dockerfile
    env_file: .env
    volumes:
      - .:/var/www/html:delegated
      - ./vendor/:/var/www/html/vendor:delegated
      - ./docker/php/php.ini:/usr/local/etc/php/conf.d/php.ini
    depends_on:
      - mariadb
      - blackfire

对于音量设置我有:

volumes:
  mariadb:
  php-fpm:
    driver: lebokus/bindfs:latest
    driver_opts:
      sourcePath: "${PWD}"
      map: "${UID}/33:@${UID}/@33"

但我在容器中没有看到任何效果。该文件夹仍然由主机用户拥有:

$ id -u
33
$ stat . # or stat ./vendor
Uid: ( 1000/ UNKNOWN)   Gid: ( 1001/ UNKNOWN)

我必须补充一点,我对内部结构一无所知bindfs,甚至读过关于地图的bindfs手册页没有启发我:

 --map=user1/user2:@group1/@group2:..., -o map=...
      Given a mapping user1/user2, all files owned by user1 are shown as owned by  user2.
      When  user2  creates  files, they are chowned to user1 in the underlying directory.
      When files are chowned to user2, they  are  chowned  to  user1  in  the  underlying
      directory. Works similarly for groups.

      A  single  user  or  group may appear no more than once on the left and once on the
      right of a slash in the list of mappings.   Currently,  the  options  --force-user,
      --force-group,  --mirror,  --create-for-*,  --chown-*  and  --chgrp-*  override the
      corresponding behavior of this option.

      Requires mounting as root.

另外,我想安装三个不同的文件夹/文件,但卷:

./docker/php/php.ini:/usr/local/etc/php/conf.d/php.ini`

不应从主机映射用户。

只有这些应该:

  • ./:/var/www/html:delegated
  • ./vendor/:/var/www/html/vendor:delegated

我尝试了地图选项的不同设置,但我不知道它们实际上在做什么。特别是。@我在网上找到的一些示例中的符号确实让我感到困惑。

例如官方 docker-compose 示例用途:

driver_opts:
  sourcePath: "${PWD}"
  map: "${UID}/0:@${UID}/@0"

该用户用途:

driver_opts:
  sourcePath: "${PWD}/../clients-service"
  map: "${UID:-1000}/33:@${UID:-1000}/@33"  

的含义是什么@?我为什么要使用-1000

最重要的是:如何从主机绑定卷并将其映射到容器内的容器用户?理想情况下,它可以双向写入,这意味着在主机上创建的文件应该可以在容器内编辑,反之亦然。我可以吗?如果可以,我该如何使用 来实现这一目标lebokus/docker-volume-bindfs plugin

相关内容