docker - 我运行docker-compose up后由于权限错误而无法编辑本地文件

标签 docker docker-compose composer-php file-permissions

我运行docker-compose up -d,然后ssh到容器中。我可以通过localhost加载站点,但是当我尝试在本地编辑源代码时,由于权限错误,它不允许我访问。这是容器vs本地上的ls -la输出:

容器:

enter image description here

本地:

enter image description here

我的dockerfile具有chown命令:

enter image description here

我的本地用户称为 pwm 。我尝试从主机运行chown -R pwm:pwm ../app,此时我可以编辑文件,但是随后出现laravel权限被拒绝的错误。然后,我需要再次运行chown -R www-data:www-data ../app进行修复。

我怎样才能解决这个问题?

最佳答案

对于开发环境,我的最佳解决方案是在容器中设置一个以root身份启动的入口点脚本,更改容器中的用户以使其与卷装入中文件/目录所有者的用户相匹配(这将是您的主机上的用户),然后切换到该用户以运行该应用。我在基本镜像存储库中有一个示例,以及在您自己的容器中实现此操作所需的脚本:https://github.com/sudo-bmitch/docker-base

在这里,fix-perms脚本可以完成繁重的工作,其中包括如下代码:

# 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可执行文件运行container命令。

关于docker - 我运行docker-compose up后由于权限错误而无法编辑本地文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53901121/

相关文章:

docker - 如何使用 Kubernetes 在云容器引擎中的容器启动时运行脚本

mysql - 容器初始化后如何连接到 docker-compose mysql?

python - 将本地 .csv 读取到容器化 Airflow

php - Composer 抛出错误 "Could not find package with stability stable."

docker - 在 Docker Swarm 中安装 SSL 证书

docker - docker远程api是否支持使用docker-compose文件创建容器?

docker - 我需要使用已经创建的主题创建一个 kafka 图像

laravel - Artisan 无法连接到容器中的 Composer

symfony - 锁文件不是最新的composer.json更改

docker - 在带有tls的k8s中,使用http而不是https进行重定向,以通过入口传递