Can';运行docker compose后,由于权限错误,无法编辑本地文件
我运行Can';运行docker compose后,由于权限错误,无法编辑本地文件,docker,docker-compose,composer-php,file-permissions,Docker,Docker Compose,Composer Php,File Permissions,我运行docker compose up-d,然后用ssh连接到容器中。我可以通过localhost加载站点,但是当我尝试在本地上编辑源代码时,由于权限错误,它不允许我加载。这是容器与本地的ls-la输出: 容器: 本地: 我的dockerfile具有chown命令: 我的本地用户称为pwm。我尝试从主机运行chown-R pwm:pwm../app,此时我可以编辑文件,但随后我得到了laravel权限拒绝错误。然后我需要再次运行chown-R www-data:www-data../ap
docker compose up-d
,然后用ssh连接到容器中。我可以通过localhost加载站点,但是当我尝试在本地上编辑源代码时,由于权限错误,它不允许我加载。这是容器与本地的ls-la输出:
容器:
本地:
我的dockerfile具有chown命令:
我的本地用户称为pwm。我尝试从主机运行chown-R pwm:pwm../app
,此时我可以编辑文件,但随后我得到了laravel权限拒绝错误。然后我需要再次运行chown-R www-data:www-data../app
来修复它
如何修复此问题?对于开发环境,我的解决方案是在容器内设置一个以root开头的入口点脚本,将容器内的用户更改为与卷装载的文件/目录所有者的用户相匹配(这将是主机上的用户),然后切换到该用户以运行应用程序。我有一个这样做的示例,以及在我的基本映像repo中您自己的容器中实现此功能所需的脚本: 在这里,fixperms脚本完成了繁重的工作,包括如下代码:
# update the uid
if [ -n "$opt_u" ]; then
OLD_UID=$(getent passwd "${opt_u}" | cut -f3 -d:)
NEW_UID=$(stat -c "%u" "$1")
if [ "$OLD_UID" != "$NEW_UID" ]; then
echo "Changing UID of $opt_u from $OLD_UID to $NEW_UID"
usermod -u "$NEW_UID" -o "$opt_u"
if [ -n "$opt_r" ]; then
find / -xdev -user "$OLD_UID" -exec chown -h "$opt_u" {} \;
fi
fi
fi
该脚本在启动时作为root用户在容器中运行。我运行的入口点的最后一步将调用如下内容:
exec gosu ${app_user} "$@"
它以应用程序用户身份作为新的pid 1可执行文件运行容器命令