Docker 卷安装和权限:主机 (33) 上的 www-data 在 Alpine 中变为 xfs (33) Linux
Docker volume mount and permissions: www-data on host (33) becomes xfs (33) in Alpine Linux
我在 docker 容器中从主机挂载目录时遇到问题:
- 高山Linuxincludes user xfs (33) and group xfs (33), with no www-data
- 主机上的文件归 www-data (33) 所有
- 我需要 nginx:alpine docker 图像中的 nginx 可以访问这些文件
这是全栈情况:我正在使用服务栈使文件在本地 LAN 上可用。
堆栈使用 nginx:alpine,图像可用 - 所以我不能轻易修改 Dockerimage。
Alpine Linux 图像中的 xfs 无法获得用户和组 ID 33,我可以做些什么吗?
我尝试在 docker-compose.yml
中设置 PUID 和 PGID,
但它不起作用(我也很难理解这一点):
services:
celeryworker:
environment:
- PUID=33
- PGID=33
最小可重现示例:
主机上的文件:
cd /mnt/nfs/folder1
ls -alh
>-rwxr-xr-x 1 www-data www-data 3.5M Sep 21 15:41 '02 - track.mp3'
ls -alhn
>-rwxr-xr-x 1 33 33 3.5M Sep 21 15:41 '02 - track.mp3'
less /etc/passwd | grep www-data
>www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
docker-compose.yml
version: "3"
services:
celeryworker:
restart: unless-stopped
image: funkwhale/funkwhale:1.0.1
networks:
- default
depends_on:
- postgres
- redis
command: celery -A funkwhale_api.taskapp worker -l INFO --concurrency=0
environment:
- C_FORCE_ROOT=true
volumes:
- "/mnt/nfs/:/music:ro"
容器中的文件:
docker exec -it funkwhale_celeryworker_1 /bin/bash
cd /music/folder1/
ls -alh
>-rwxr-xr-x 1 xfs xfs 3.4M Sep 21 13:41 '02 - track1.mp3'
ls -alhn
>-rwxr-xr-x 1 33 33 3.4M Sep 21 13:41 '02 - track1.mp3'
su xfs
>This account is not available
less /etc/passwd | grep xfs
>xfs:x:33:33:X Font Server:/etc/X11/fs:/sbin/nologin
回复晚了,但也许对其他人有帮助。Debian/Ubuntu 中 www-data
的 UID:GID 与 Alpine 中的 ID 不匹配:
user : group
Debian/Ubuntu (uid:gid)
Alpine (uid:gid)
www-data : www-data
33 : 33
82 : 82
xfs : xfs
-
33 : 33
如果您的主机文件夹归 www-data:www-data
(33:33
) 所有,则在 Alpine 容器内,此 uid:gid 将与 [= 的 uid:gid 相匹配14=] 并且您将遇到权限问题。
要解决此问题,您可以将主机中的所有权更改为 82:82:
$ sudo chown -R 82:82 host_directory
此 gist
中包含不同解决方案的更多详细信息
我在 docker 容器中从主机挂载目录时遇到问题:
- 高山Linuxincludes user xfs (33) and group xfs (33), with no www-data
- 主机上的文件归 www-data (33) 所有
- 我需要 nginx:alpine docker 图像中的 nginx 可以访问这些文件
这是全栈情况:我正在使用服务栈使文件在本地 LAN 上可用。 堆栈使用 nginx:alpine,图像可用 - 所以我不能轻易修改 Dockerimage。
Alpine Linux 图像中的 xfs 无法获得用户和组 ID 33,我可以做些什么吗?
我尝试在 docker-compose.yml
中设置 PUID 和 PGID,
但它不起作用(我也很难理解这一点):
services:
celeryworker:
environment:
- PUID=33
- PGID=33
最小可重现示例:
主机上的文件:cd /mnt/nfs/folder1
ls -alh
>-rwxr-xr-x 1 www-data www-data 3.5M Sep 21 15:41 '02 - track.mp3'
ls -alhn
>-rwxr-xr-x 1 33 33 3.5M Sep 21 15:41 '02 - track.mp3'
less /etc/passwd | grep www-data
>www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
docker-compose.yml
version: "3"
services:
celeryworker:
restart: unless-stopped
image: funkwhale/funkwhale:1.0.1
networks:
- default
depends_on:
- postgres
- redis
command: celery -A funkwhale_api.taskapp worker -l INFO --concurrency=0
environment:
- C_FORCE_ROOT=true
volumes:
- "/mnt/nfs/:/music:ro"
容器中的文件:
docker exec -it funkwhale_celeryworker_1 /bin/bash
cd /music/folder1/
ls -alh
>-rwxr-xr-x 1 xfs xfs 3.4M Sep 21 13:41 '02 - track1.mp3'
ls -alhn
>-rwxr-xr-x 1 33 33 3.4M Sep 21 13:41 '02 - track1.mp3'
su xfs
>This account is not available
less /etc/passwd | grep xfs
>xfs:x:33:33:X Font Server:/etc/X11/fs:/sbin/nologin
回复晚了,但也许对其他人有帮助。Debian/Ubuntu 中 www-data
的 UID:GID 与 Alpine 中的 ID 不匹配:
user : group | Debian/Ubuntu (uid:gid) | Alpine (uid:gid) |
---|---|---|
www-data : www-data | 33 : 33 | 82 : 82 |
xfs : xfs | - | 33 : 33 |
如果您的主机文件夹归 www-data:www-data
(33:33
) 所有,则在 Alpine 容器内,此 uid:gid 将与 [= 的 uid:gid 相匹配14=] 并且您将遇到权限问题。
要解决此问题,您可以将主机中的所有权更改为 82:82:
$ sudo chown -R 82:82 host_directory
此 gist
中包含不同解决方案的更多详细信息