使用 Podman 设置 Lavarel,但 php 用户无法写入我的挂载目录

使用 Podman 设置 Lavarel,但 php 用户无法写入我的挂载目录

我使用 Podman 在 Fedora 上建立了一个 laravel 项目。为此,我编写了一个小脚本,试图取代通常由 sail 完成的构建过程。

#!/usr/bin/env bash

if [ -f ./.env ]; then
  # Surce .env so Laravel's env variables are available...
  source ./.env
fi

export WWWGROUP=$(id -g)
export PODNAME=laravel

podman build -t laravel:image --build-arg=WWWGROUP=${WWWGROUP} vendor/laravel/sail/runtimes/7.4

podman pod create -n ${PODNAME} -p 8080:80
podman create --name laraveldb \
  -e MYSQL_USER=${DB_USERNAME} \
  -e MYSQL_PASSWORD=${DB_PASSWORD} \
  -e MYSQL_DATABASE=${DB_DATABASE} \
  -e MYSQL_ROOT_PASSWORD=rootpassword \
  --pod ${PODNAME} \
  centos/mariadb

podman create --name laravelphp \
  -v ./:/var/www/html:Z \
  --pod ${PODNAME} \
  -e WWWUSER=$(id -u) \
  datapics:image

我知道这个脚本可能存在一些问题,但我不想分发它,我只是想能够轻松地重复这些步骤进行测试。

一切运行良好,我可以构建并运行项目,但是当我打开时localhost:8080出现以下错误

The stream or file "/var/www/html/storage/logs/laravel.log" could not be opened in append mode: failed to open stream: Permission denied

如果我授予“其他”对该storage目录的写权限,我可以解决这个问题,但我想做的是让 sail 用户成为已挂载目录中文件的所有者,这样它就有 rw 权限,而无需向主机中的每个人开放这些权限。

我尝试--userns keep-id在创建 laravelphp 容器时添加,但不起作用。容器无法启动。我也尝试-u $(id -u)在创建容器时添加,但不起作用。容器无法启动。

我已成功更改容器内文件的所有权, podman exec laravelphp chown -R sail /var/www/html但这也改变了容器外文件的所有权。我知道这是预料之中的,因为 podman 和用户命名空间的工作方式。

有没有办法挂载目录,以便容器内的目录归 sail 用户所有,而不是 root 用户所有?容器内的 sail 用户具有与主机中的用户相同的 ID (1000)。

据我所知,php 容器必须以 root 身份运行,否则将无法启动甚至无法创建。

相关内容