我目前为我的 laravel 项目有一个很好的 docker 设置
当我需要执行 php artisan 命令时,我将 php-fpm 容器附加到我的终端。一切都很好。除非 artisan 命令创建新文件。
文件是以 root 身份创建的。为了解决这个问题,我需要“chown -R 1000:1000 /application”
每次都这样做非常烦人,并且正在徘徊是否有一种方法可以在 Ubuntu 或我的 docker 设置中让 artisan 自己创建 1000 个文件,而我不需要再担心了。
您需要做的是创建一个用户并告诉 Docker 使用该用户进行所有后续操作,例如
# Dockerfile
...
WORKDIR /var/www
...
# create a new linux user group called 'developer' with an arbitrary group id of '1001'
RUN groupadd -g 1001 developer
# create a new user called developer and add it to this group
RUN useradd -u 1001 -g developer developer
# change the owner and group of the current working directory to developer
COPY --chown=developer:developer . /var/www
# run all subsequent processes as this user
USER developer
...
EXPOSE 9000
CMD ["php-fpm"]
创建组并不是绝对必要的,但如果您需要在单个集群或服务器上为多个服务或用户分配相同的权限,那么创建组会很有用。
如果您不为 Docker 容器分配非 root 用户进行本地开发等操作,那么这不是世界末日,但您会遇到所遇到的问题。然而,在生产中,这可能是一个“严重”的安全问题,因为它可以使攻击者获得系统其余部分的 root 权限。 Dockerfile 参考:https://docs.docker.com/engine/reference/builder/#user
对于任何对 laravel 和 sail/docker 有同样问题的人。要解决本地开发的此问题,您可以更改 docker.sock 的权限,如下所示:
sudo chmod 666 /var/run/docker.sock
直接在命令上模拟你想要的用户
sudo -u {此处的用户} php artisan storage:populate