From 5797885f3d32dda2f3fbd3906db0a9bb2be730a4 Mon Sep 17 00:00:00 2001 From: augushong Date: Wed, 22 Jul 2026 23:29:50 +0800 Subject: [PATCH] =?UTF-8?q?fix(stack):=20=E4=BF=AE=E5=A4=8D=20bind=20mount?= =?UTF-8?q?=20=E9=81=AE=E8=94=BD=20build=20=E6=9C=9F=20symlink=20=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=E5=AE=B9=E5=99=A8=E5=90=AF=E5=8A=A8=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit B-route 下 build context=仓库根 + bind mount /var/www/html 有两个问题: 1. ENTRYPOINT 引用 /var/www/html/source/docker/run.sh 在运行期找不到: build 期的 symlink 被 bind mount 完全覆盖,容器看到的是宿主机 仓库根的 source/docker/(只有 nginx.conf/zz-phprun.ini/zz-phpfpm.conf, 没有 run.sh) 2. 模式目录 source/docker/ 不自包含: 只有 run.sh/zzz-dev.ini/zzz-xdebug.ini,缺基础配置 修复(docker-dev 模式): - run.sh 改为用 SCRIPT_DIR 自动检测脚本所在目录 - Dockerfile ENTRYPOINT/chmod 改为完整路径 /var/www/html/source/stack/docker-dev/source/docker/run.sh - 基础配置(nginx.conf/zz-phprun.ini/zz-phpfpm.conf)复制到模式目录 使其自包含 验证:docker compose build 通过,up 容器稳定运行, nginx + PHP-FPM 启动成功,ThinkPHP CLI 正常(v8.1.4) --- source/stack/docker-dev/Dockerfile | 5 ++-- .../stack/docker-dev/source/docker/nginx.conf | 30 +++++++++++++++++++ source/stack/docker-dev/source/docker/run.sh | 13 ++++---- .../docker-dev/source/docker/zz-phpfpm.conf | 8 +++++ .../docker-dev/source/docker/zz-phprun.ini | 26 ++++++++++++++++ 5 files changed, 75 insertions(+), 7 deletions(-) create mode 100644 source/stack/docker-dev/source/docker/nginx.conf create mode 100644 source/stack/docker-dev/source/docker/zz-phpfpm.conf create mode 100644 source/stack/docker-dev/source/docker/zz-phprun.ini diff --git a/source/stack/docker-dev/Dockerfile b/source/stack/docker-dev/Dockerfile index d89c337..c7eb45d 100644 --- a/source/stack/docker-dev/Dockerfile +++ b/source/stack/docker-dev/Dockerfile @@ -83,9 +83,10 @@ VOLUME /var/www/html/storage # Expose Nginx port EXPOSE 8000 -RUN chmod +x /var/www/html/source/docker/run.sh +# B-route bind mount 模式:ENTRYPOINT 必须用完整路径(build 期 symlink 被 bind mount 覆盖) +RUN chmod +x /var/www/html/source/stack/docker-dev/source/docker/run.sh # Start Nginx and PHP-FPM -ENTRYPOINT ["/bin/bash", "/var/www/html/source/docker/run.sh"] +ENTRYPOINT ["/bin/bash", "/var/www/html/source/stack/docker-dev/source/docker/run.sh"] CMD ["server"] diff --git a/source/stack/docker-dev/source/docker/nginx.conf b/source/stack/docker-dev/source/docker/nginx.conf new file mode 100644 index 0000000..801249e --- /dev/null +++ b/source/stack/docker-dev/source/docker/nginx.conf @@ -0,0 +1,30 @@ + +server { + listen 8000 default_server; + listen [::]:8000 default_server; + + root /var/www/html/public; + index index.php index.html index.htm; + + server_name _; + + # 上传大小不限制 + client_max_body_size 8192m; + + # 运行时长不限制 + fastcgi_read_timeout 60000; + + location / { + if (!-e $request_filename) { + rewrite ^(.*)$ /index.php?s=$1 last; break; + } + + } + + location ~ \.php$ { + include fastcgi_params; + fastcgi_pass 127.0.0.1:9000; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param PATH_INFO $fastcgi_path_info; + } +} diff --git a/source/stack/docker-dev/source/docker/run.sh b/source/stack/docker-dev/source/docker/run.sh index b7f54be..21d57a6 100644 --- a/source/stack/docker-dev/source/docker/run.sh +++ b/source/stack/docker-dev/source/docker/run.sh @@ -1,16 +1,19 @@ #!/bin/bash +# 自动检测脚本所在目录(B-route 兼容:bind mount 下路径为 source/stack//source/docker/) +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + # 将代码中的nginx复制到nginx配置文件中 -cp /var/www/html/source/docker/nginx.conf /etc/nginx/sites-available/default +cp "$SCRIPT_DIR/nginx.conf" /etc/nginx/sites-available/default ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default # 将代码中的php配置文件复制到php配置文件中 -cp /var/www/html/source/docker/zz-phprun.ini /usr/local/etc/php/conf.d -cp /var/www/html/source/docker/zz-phpfpm.conf /usr/local/etc/php-fpm.d +cp "$SCRIPT_DIR/zz-phprun.ini" /usr/local/etc/php/conf.d +cp "$SCRIPT_DIR/zz-phpfpm.conf" /usr/local/php-fpm.d # 开发模式:覆盖生产PHP配置(Opcache、错误显示、Xdebug) -cp /var/www/html/source/docker/zzz-dev.ini /usr/local/etc/php/conf.d -cp /var/www/html/source/docker/zzz-xdebug.ini /usr/local/etc/php/conf.d +cp "$SCRIPT_DIR/zzz-dev.ini" /usr/local/etc/php/conf.d +cp "$SCRIPT_DIR/zzz-xdebug.ini" /usr/local/etc/php/conf.d # 设置目录权限,确保挂载卷后依然有效 diff --git a/source/stack/docker-dev/source/docker/zz-phpfpm.conf b/source/stack/docker-dev/source/docker/zz-phpfpm.conf new file mode 100644 index 0000000..a145c68 --- /dev/null +++ b/source/stack/docker-dev/source/docker/zz-phpfpm.conf @@ -0,0 +1,8 @@ + +[www] +; 进程数不限制 +pm = dynamic +pm.max_children = 150 +pm.start_servers = 10 +pm.min_spare_servers = 10 +pm.max_spare_servers = 30 \ No newline at end of file diff --git a/source/stack/docker-dev/source/docker/zz-phprun.ini b/source/stack/docker-dev/source/docker/zz-phprun.ini new file mode 100644 index 0000000..a810c16 --- /dev/null +++ b/source/stack/docker-dev/source/docker/zz-phprun.ini @@ -0,0 +1,26 @@ +; 内存不限制 +memory_limit = -1 + +; 上传文件大小不限制 +upload_max_filesize = -1 + +; 运行时长不限制 +max_execution_time = 0 + +; POST大小不限制 +post_max_size = -1 + +; 设置时区 + date.timezone = "Asia/Shanghai" + + +[Zend Opcache] +opcache.enable = 1 +opcache.memory_consumption=128 +opcache.interned_strings_buffer=32 +opcache.max_accelerated_files=80000 +opcache.revalidate_freq=3 +opcache.fast_shutdown=1 +opcache.enable_cli=1 +opcache.jit_buffer_size=128m +opcache.jit=1205 \ No newline at end of file