Mac环境Docker容器访问localhost:8080出现HTTP 500错误排查
问题分析与解决方案
核心问题拆解
1. 初始sed命令解析失败
初始日志中的sed: -e expression #1, char 30: unknown option to 's'错误,根源是你用/作为sed替换的分隔符,但$WP_SENTRY_PHP_DSN等变量的值包含/(比如https://xxx...格式的链接),导致sed把这些/误判成分隔符,进而解析替换表达式失败。
2. 修改后sed命令格式错误
修改后的日志出现sed: can't read s/{DB_HOST}/vd-db/g: No such file or directory,说明修改后的sed命令格式完全错误——sed把替换表达式当成了要读取的文件名,大概率是误删了-i参数后的引号,或者打乱了命令参数顺序。
修复步骤
步骤1:替换sed分隔符解决解析冲突
把所有sed命令的分隔符从/换成不会在变量值中出现的字符(比如#),避免斜杠引发的解析错误。修改启动脚本中的sed命令为:
sed -i "s#{DB_HOST}#$DB_HOST#g" /var/www/html/config/application.php sed -i "s#{DB_PORT}#$DB_PORT#g" /var/www/html/config/application.php sed -i "s#{DB_NAME}#$DB_NAME#g" /var/www/html/config/application.php sed -i "s#{DB_USER}#$DB_USER#g" /var/www/html/config/application.php sed -i "s#{DB_PASSWORD}#$DB_PASSWORD#g" /var/www/html/config/application.php sed -i "s#{WP_SENTRY_PHP_DSN}#$WP_SENTRY_PHP_DSN#g" /var/www/html/config/application.php sed -i "s#{WP_SENTRY_ENV}#$WP_SENTRY_ENV#g" /var/www/html/config/application.php sed -i "s#{JS_DSN}#$JS_DSN#g" /var/www/html/config/application.php sed -i "s#{WP_ROCKET_KEY}#$WP_ROCKET_KEY#g" /var/www/html/config/application.php sed -i "s#{WP_ROCKET_EMAIL}#$WP_ROCKET_EMAIL#g" /var/www/html/config/application.php sed -i "s#{WP_MIGRATE_DB_PRO_KEY}#$WP_MIGRATE_DB_PRO_KEY#g" /var/www/html/config/application.php
步骤2:验证配置文件替换结果
容器启动后,进入容器检查配置文件是否被正确替换:
# 替换成你的容器ID或名称 docker exec -it <container_id/name> bash # 查看配置文件内容 cat /var/www/html/config/application.php
确认所有{xxx}占位符都被替换为对应的环境变量值,若未替换,检查环境变量是否正确传入容器,以及脚本是否有权限修改该文件。
步骤3:排查WordPress 500错误
若sed替换成功后仍出现500错误,需查看PHP错误日志定位问题:
- 常规PHP错误日志路径:
/var/log/php-fpm.log - 开启WordPress调试模式:在
wp-config.php中添加以下代码:
define('WP_DEBUG', true); define('WP_DEBUG_LOG', true); define('WP_DEBUG_DISPLAY', false);
重新访问页面后,查看wp-content/debug.log中的具体错误信息,定位代码或配置问题。
额外优化建议
- 避免用sed直接修改配置文件,推荐使用
envsubst等模板工具处理变量替换,更稳定且不易出错; - WordPress支持直接通过环境变量配置数据库信息,可跳过自定义脚本替换,直接在
docker-compose.yml中配置对应环境变量即可生效。
内容的提问来源于stack exchange,提问作者Flavio
相关产品推荐
相关产品推荐

