lebokus/docker-volume-bindfs 플러그인을 사용하여 내 호스트를 docker-compose의 컨테이너 사용자에 매핑하려면 어떻게 해야 합니까?

lebokus/docker-volume-bindfs 플러그인을 사용하여 내 호스트를 docker-compose의 컨테이너 사용자에 매핑하려면 어떻게 해야 합니까?

Dockerfiles 및 docker-compose를 통해 PHP 개발 스택을 설정했습니다. 소스 트리와 Composer Vendor 폴더를 컨테이너에 마운트했습니다. 내 호스트의 로컬 사용자는 philippID를 가지고 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심지어 읽었다는 것을 덧붙여야 합니다.지도에 대한 binfs 매뉴얼 페이지나에게 영감을 주지 않았습니다:

 --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 작성 예사용:

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?

관련 정보