From 7341268cebaaf7c2e42dcfca45cc314242d7a5de Mon Sep 17 00:00:00 2001 From: augushong Date: Sat, 8 Aug 2026 10:33:44 +0800 Subject: [PATCH] =?UTF-8?q?fix(docker):=20run.sh=20=E5=8A=A0=20umask=20000?= =?UTF-8?q?=20+=20=E9=A2=84=E5=88=9B=E5=BB=BA=20runtime=20=E5=AD=90?= =?UTF-8?q?=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit bind mount 模式下 Dockerfile 的权限处理被宿主目录覆盖, PHP 新建的子目录(runtime/cache/da/ 等)默认 755 导致 www-data 无法写入。 - 开头加 umask 000 让子进程创建的文件/目录全局可写 - mkdir 预创建 cache/log/temp/session/nginx 子目录 - docker-dev 和 docker-dev-sync 同步修复 --- source/stack/docker-dev-sync/source/docker/run.sh | 9 ++++++++- source/stack/docker-dev/source/docker/run.sh | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/source/stack/docker-dev-sync/source/docker/run.sh b/source/stack/docker-dev-sync/source/docker/run.sh index c7b424b..6edf195 100644 --- a/source/stack/docker-dev-sync/source/docker/run.sh +++ b/source/stack/docker-dev-sync/source/docker/run.sh @@ -1,5 +1,10 @@ #!/bin/bash +# 开发环境 umask:bind mount 下 Dockerfile 的权限处理被宿主目录覆盖, +# PHP 新建的子目录(如 runtime/cache/da/)默认 755 导致 www-data 无法写入。 +# 设 000 让子进程(php-fpm worker / timer)创建的文件/目录全局可写。 +umask 000 + # 自动检测脚本所在目录(B-route 兼容:bind mount 下路径为 source/stack//source/docker/) SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" @@ -44,7 +49,9 @@ cp "$SCRIPT_DIR/zzz-dev.ini" /usr/local/etc/php/conf.d cp "$SCRIPT_DIR/zzz-xdebug.ini" /usr/local/etc/php/conf.d # ---- Step 3: Set directory permissions ---- -mkdir -p /var/www/html/runtime && chmod -R 777 /var/www/html/runtime +# bind mount 覆盖 Dockerfile 的 mkdir/chmod,必须在启动脚本中重建 +# 预创建 ThinkPHP 运行时关键子目录,避免首次写入时 No such file or directory +mkdir -p /var/www/html/runtime/{cache,log,temp,session,nginx} && chmod -R 777 /var/www/html/runtime mkdir -p /var/www/html/public/storage && chmod -R 777 /var/www/html/public/storage mkdir -p /var/www/html/public/build && chmod -R 777 /var/www/html/public/build mkdir -p /var/www/html/storage && chmod -R 777 /var/www/html/storage diff --git a/source/stack/docker-dev/source/docker/run.sh b/source/stack/docker-dev/source/docker/run.sh index e900734..57ba496 100644 --- a/source/stack/docker-dev/source/docker/run.sh +++ b/source/stack/docker-dev/source/docker/run.sh @@ -1,5 +1,10 @@ #!/bin/bash +# 开发环境 umask:bind mount 下 Dockerfile 的权限处理被宿主目录覆盖, +# PHP 新建的子目录(如 runtime/cache/da/)默认 755 导致 www-data 无法写入。 +# 设 000 让子进程(php-fpm worker / timer)创建的文件/目录全局可写。 +umask 000 + # 自动检测脚本所在目录(B-route 兼容:bind mount 下路径为 source/stack//source/docker/) SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" @@ -17,7 +22,9 @@ cp "$SCRIPT_DIR/zzz-xdebug.ini" /usr/local/etc/php/conf.d # 设置目录权限,确保挂载卷后依然有效 -mkdir -p /var/www/html/runtime && chmod -R 777 /var/www/html/runtime +# bind mount 覆盖 Dockerfile 的 mkdir/chmod,必须在启动脚本中重建 +# 预创建 ThinkPHP 运行时关键子目录,避免首次写入时 No such file or directory +mkdir -p /var/www/html/runtime/{cache,log,temp,session,nginx} && chmod -R 777 /var/www/html/runtime mkdir -p /var/www/html/public/storage && chmod -R 777 /var/www/html/public/storage mkdir -p /var/www/html/public/build && chmod -R 777 /var/www/html/public/build mkdir -p /var/www/html/storage && chmod -R 777 /var/www/html/storage