Laravel项目Docker Web容器未运行问题求助(Ubuntu基础镜像)
问题详情
我最近在尝试用Docker部署Laravel项目,选了Ubuntu作为基础镜像,也按要求配置了Laravel的各种依赖。结果执行docker-compose up之后,MySQL和Adminer容器都正常运行,唯独Web容器压根没启动起来,完全摸不着头脑。
下面是我的配置文件(麻烦补充完整内容):
Dockerfile
# 请粘贴你的Dockerfile内容
docker-compose.yml
# 请粘贴你的docker-compose.yml内容
先试试这些排查方法!
因为看不到具体配置,我先给你列几个最常见的原因和解决办法,大概率能帮你找到问题:
启动命令搞砸了
先检查Dockerfile里的CMD/ENTRYPOINT,或者docker-compose.yml里的command配置,是不是写错了Laravel的启动命令?比如用内置服务器的话应该是php artisan serve --host=0.0.0.0(必须加--host=0.0.0.0不然容器外访问不到),如果是Nginx+FPM的话,得确保Nginx的启动脚本没问题。命令错了的话容器会直接退出。依赖没装全或者权限不对
别以为配置了依赖就万事大吉,说不定漏了某个PHP扩展(比如pdo_mysql、mbstring这些Laravel必需的),或者Composer依赖没装完。你可以手动跑一下镜像看看:docker build -t laravel-web . docker run -it laravel-web bash进去后先查PHP扩展:
php -m,看看有没有Laravel需要的那些。然后检查项目目录的权限,storage和bootstrap/cache这俩目录必须是可写的,一般可以用chown -R www-data:www-data /var/www/html(如果用www-data用户的话)。先看日志!先看日志!先看日志!
这是最直接的排查方式,执行docker-compose logs web,看看Web容器启动失败的日志内容,里面肯定会明确告诉你崩溃原因——比如找不到文件、权限不足、数据库连接失败、环境变量配置错误之类的。端口冲突或者资源不够
检查下docker-compose.yml里Web容器的端口映射,比如是不是把80端口映射到本地已经被占用的端口了?或者有没有给容器设置了过低的内存/CPU限制,导致启动不起来。环境变量没配对
Laravel靠.env文件运行,如果.env没正确挂载到容器里,或者里面的数据库连接信息等关键配置写错了,启动的时候就会报错。确保docker-compose.yml里正确挂载了.env文件,或者在services.web.envs里配置了必要的环境变量。镜像构建时出错没注意
有时候构建镜像的时候有警告或者错误,但你没仔细看,导致镜像本身就有问题。重新构建一次看看:docker-compose build --no-cache web,盯着输出看,有没有红颜色的报错信息。
要是还解决不了...
把你的Dockerfile和docker-compose.yml的完整内容贴出来,或者把docker-compose logs web的日志内容发上来,我帮你精准定位问题!
内容的提问来源于stack exchange,提问作者Prince Kumar Barnwal

