开发团队如何解决主机与容器文件所有者UID不匹配问题
我的环境配置
- Windows 11
- WSL2
- 采用WSL引擎的Docker Desktop v4.14.0
已知信息
- 文件权限以数字用户ID(UID)为准
- OpenLitespeed Docker镜像使用
UID 999
使用场景
项目使用OpenLitespeed Docker镜像,docker-compose.yml中的服务定义如下:
litespeed: image: litespeedtech/openlitespeed:${OLS_VERSION}-${PHP_VERSION} env_file: - ./.env logging: driver: none volumes: - ./lsws/conf:/usr/local/lsws/conf - ./lsws/admin-conf:/usr/local/lsws/admin/conf - ./bin/container:/usr/local/bin - ./sites:/var/www/vhosts/ - ./acme:/root/.acme.sh/ - ./logs:/usr/local/lsws/logs/ - ./pub:/var/www/pub/ - ./install:/var/www/install/ - ./config:/var/www/config/ - ./.env:/var/www/.env ports: - 80:80 - 443:443 - 443:443/udp - 7080:7080 restart: on-failure environment: TZ: ${TimeZone} networks: - default
克隆代码库到本地后,工作目录下的文件归当前用户所有(比如UID 1000)。启动容器时,绑定挂载的目录和文件会继承主机的UID 1000所有者,但容器内的进程以UID 999用户运行,两者不一致导致权限问题。
或许文件应该归容器运行的UID所有?
可以用chown将文件改为UID 999所有,让容器正常工作,但在主机上编辑绑定挂载的文件时会遇到权限错误——因为文件归UID 999所有,而该用户在主机上可能不存在。
那解决方案是在主机上创建UID 999的用户吗?
可以创建该用户,将实际用户加入其用户组,并赋予组写入权限(chmod g+w)。这样实际用户能在主机编辑文件,容器也能正常运行。但创建新文件时,主机上生成的文件归当前用户所有,容器又会出现权限问题。
利用SGID位保证文件组一致性怎么样?
这或许可行。如果目录下所有新文件和目录都继承组权限,结合之前设置的组可写权限,就能实现双向正常访问。这看起来可行。
但如何让整个开发团队都能正常使用?
不能假设所有人都能在主机上创建UID 999的用户,因为该UID可能已被占用。肯定有合适的解决方案,只是我暂时没想到。
内容的提问来源于stack exchange,提问作者jgangso
相关产品推荐
相关产品推荐

