我使用 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 身份运行,否则将无法启动甚至无法创建。