Git 错误:无法取消旧';gulpfile.js';使用Docker Compose for development environment时(权限被拒绝)
我正在使用以下工具开发一个PHP 7.1 web应用程序:Git 错误:无法取消旧';gulpfile.js';使用Docker Compose for development environment时(权限被拒绝),git,symfony,docker,permissions,docker-compose,Git,Symfony,Docker,Permissions,Docker Compose,我正在使用以下工具开发一个PHP 7.1 web应用程序: error: unable to unlink old 'gulpfile.js' (Permission denied) fatal: Could not reset index file to revision 'HEAD^'. Symfony 3.2 Docker Compose 1.12.0 Ubuntu 16.04 x64 运行docker compose up-d时,我绑定的项目目录的所有者和组将更改为root。因此,
error: unable to unlink old 'gulpfile.js' (Permission denied)
fatal: Could not reset index file to revision 'HEAD^'.
- Symfony 3.2
- Docker Compose 1.12.0
- Ubuntu 16.04 x64
docker compose up-d
时,我绑定的项目目录的所有者和组将更改为root。因此,每当我尝试使用git pull
从远程设备提交更改或拉取时,我都会看到以下内容:
error: unable to unlink old 'gulpfile.js' (Permission denied)
fatal: Could not reset index file to revision 'HEAD^'.
返回到我的用户删除错误。在使用Docker Compose进行开发时,是否有更简单的方法来防止这些用户权限冲突
编辑以下是我当前目录结构的概述:
dockerComposeAndProjectDir/
|-- projectDirectory/
|-- dockerComposeDirectory/
|-- docker-compose.yml
如本文所述
如果您在绑定装入卷之前将卷(在主机端)加载,它将工作。在这种情况下,您可以执行以下操作: (假设
101:101
是容器中www-data
用户的UID:GID
)
另一种可能是进行绑定安装,然后在容器内进行chown
使用卷只需假设映像的装载路径上有数据即可。使用绑定将使用主机路径的UID/GID。
容器中的UID/GID与主机上的UID/GID相同。。。即使用户名/组名不匹配,UID/GID在这里也很重要 我提到了这个问题。
OP得出结论:
php:7.1-fpm
Dockerfile表示php-fpm
服务将作为www-data
运行,因此我对容器的用户不正确。在初始绑定装载后重新装载卷似乎有效。
每当Docker Compose需要重新创建该卷时,我都必须再次浏览它,这有点烦人,但它确实解决了我的问题
在运行
docker compose up-d
之前,我尝试使用用户的UID和GID从主机上浏览卷。但是,在up命令运行后,我的绑定挂载项目目录仍然以root作为所有者和组,除了在容器装入卷后使用入口点脚本手动更改所有者/组之外,我不确定是否有人找到了其他解决方案。@ChristianElowsky您需要确保主机和容器中的uid/gid相同。@ChristianElowsky自从您接受了答案后,我认为这是可行的。我使用的是PHP7.1-fpm容器,作为根用户运行。对于我的nginx容器,很容易确保www数据用户的UID与我的主机用户UID相同。我将runusermod-u1000 www-data
放在Dockerfile的CMD
前面。但是,将PHP7.1-fpm容器的RUN usermod-u 1000 root
放在CMD
之前失败,原因是usermod:user root当前由进程1使用错误:服务“php”无法生成:命令“/bin/sh-c usermod-u 1000 root”返回非零代码:8
,因为Docker可能已经在使用root。