我通过 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
?