diff --git a/docker/php/Dockerfile b/docker/php/Dockerfile index ab5bd85da..8b2831a3b 100644 --- a/docker/php/Dockerfile +++ b/docker/php/Dockerfile @@ -86,7 +86,41 @@ EXPOSE 9000 8080 # 添加在Dockerfile末尾,CMD命令之前 COPY ./entrypoint.sh /usr/local/bin/ RUN chmod +x /usr/local/bin/entrypoint.sh + +# 设置环境变量来控制entrypoint行为 +# 可以通过docker run -e 或docker-compose.yml覆盖这些值 +# ENV PHP_APP_ROOT=/var/www/html \ +# USER_ID=33 \ +# GROUP_ID=33 +# ======================================== +# Dockerfile 配置选项说明 +# ======================================== +# +# 1. 默认行为(当前配置): +# - 使用 /var/www/html 作为应用根目录 +# - 启动 supervisord +# - 适用于标准Web应用 +# +# 2. 自定义应用根目录: +# 在docker run时覆盖环境变量: +# docker run -e PHP_APP_ROOT=/custom/app php-app +# +# 3. 传递路径参数给entrypoint: +# 修改ENTRYPOINT来包含路径: +# ENTRYPOINT ["/usr/local/bin/entrypoint.sh", "/custom/path"] +# CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"] +# +# 4. 不同启动命令: +# 修改CMD来启动不同服务: +# CMD ["php-fpm"] # 直接启动PHP-FPM +# CMD ["/bin/bash"] # 启动shell进行调试 +# CMD ["apache2ctl", "-D", "FOREGROUND"] # 启动Apache +# +# ======================================== + +# 设置ENTRYPOINT,注意这里不会带路径参数 +# 路径可以通过环境变量PHP_APP_ROOT控制,默认是/var/www/html ENTRYPOINT ["/usr/local/bin/entrypoint.sh"] -# 修改CMD命令 +# CMD会作为参数传递给entrypoint.sh CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"] \ No newline at end of file diff --git a/docker/php/entrypoint.sh b/docker/php/entrypoint.sh index fca5d49c2..773779653 100644 --- a/docker/php/entrypoint.sh +++ b/docker/php/entrypoint.sh @@ -6,20 +6,17 @@ show_help() { cat << EOF === Web应用权限初始化脚本 === -用法: $0 [app_root_dir] [--help|-h] +用法: $0 [--help|-h] 参数: - app_root_dir 应用根目录路径 (可选) --help, -h 显示此帮助信息 + 优先级: - 1. 命令行参数 (最高优先级) - 2. 环境变量 PHP_APP_ROOT - 3. 默认值 /var/www/html + 1. 环境变量 PHP_APP_ROOT + 2. 默认值 /var/www/html 示例: - $0 /var/www/html # 使用命令行参数 - $0 /data/www # 自定义路径 $0 # 使用环境变量或默认值 PHP_APP_ROOT=/custom $0 /var/www # 参数优先,忽略环境变量 @@ -28,36 +25,22 @@ EOF echo "=== Web应用权限初始化 ===" -# 解析命令行参数 -# 用法: entrypoint.sh [app_root_dir] [--help|-h] +# 默认值 +APP_ROOT="/var/www/html" +SOURCE="默认值" -# 检查帮助参数 -if [ "$1" = "--help" ] || [ "$1" = "-h" ]; then - show_help - exit 0 -fi - -if [ $# -gt 0 ]; then - # 优先使用命令行参数 - APP_ROOT="$1" - SOURCE="命令行参数" -elif [ -n "${PHP_APP_ROOT}" ]; then +if [ -n "${PHP_APP_ROOT}" ]; then # 其次使用环境变量 APP_ROOT="${PHP_APP_ROOT}" SOURCE="环境变量 PHP_APP_ROOT" -else - # 最后使用默认值 - APP_ROOT="/var/www/html" - SOURCE="默认值" fi echo "使用应用根目录: $APP_ROOT (来源: $SOURCE)" # 验证应用根目录是否有效 if [ ! -d "$APP_ROOT" ]; then - echo "⚠️ 警告: 应用根目录 '$APP_ROOT' 不存在" - echo "将尝试创建该目录..." - mkdir -p "$APP_ROOT" 2>/dev/null || echo "❌ 无法创建目录 '$APP_ROOT'" + echo "⚠️ 警告: 应用根目录 '$APP_ROOT' 不存在, 程序退出" + exit 1 fi # 创建统一的Web组并配置所有用户(最高效的权限管理)