如何仅通过docker-compose.yml文件运行无Nginx依赖的PHP服务
如何仅通过docker-compose.yml文件运行无Nginx依赖的PHP服务
嗨,我来帮你理清楚问题所在并解决它~
你手动运行容器的时候,额外加了php -S="0.0.0.0:3000" -t="/var/www/html"这个命令,其实是启动了PHP内置的开发HTTP服务器,所以能直接访问。但你当前的docker-compose.yml里,只是用了镜像默认的启动命令——也就是启动php-fpm服务(端口9000),这是个FastCGI进程,本身不处理HTTP请求,得搭配Nginx这类反向代理才能对外提供服务,所以你没法直接连接上PHP。
要实现和手动运行一样的效果,只需要在docker-compose.yml里覆盖镜像的默认启动命令,指定启动PHP内置服务器,同时调整端口映射和挂载代码目录就行。这里是修改后的配置:
version: '3' services: php: image: nanoninja/php-fpm:8.1 restart: always ports: - 3000:3000 # 和内置服务器监听的端口对应 volumes: - ./:/var/www/html # 把本地代码目录挂载到容器内的站点根目录 stdin_open: true tty: true command: php -S 0.0.0.0:3000 -t /var/www/html # 覆盖默认命令,启动内置服务器
我来拆解下关键修改点:
command:用这个参数替换镜像默认的php-fpm启动指令,和你手动运行时的命令逻辑一致(语法上去掉等号也能正常运行)ports:把原来的3000:9000改成3000:3000,因为PHP内置服务器监听的是容器内的3000端口,要和本地端口对应上volumes:新增这一行,和手动运行时的-v $(pwd):/var/www/html作用相同,让容器能访问你本地的PHP代码文件
配置改好后,运行docker-compose up -d启动服务,然后就可以通过http://localhost:3000访问你的PHP应用啦~
另外要提醒下:PHP内置服务器仅适合开发测试场景,性能和稳定性都不足以支撑生产环境,生产环境还是建议搭配Nginx+php-fpm的组合哦。
备注:内容来源于stack exchange,提问作者Sergey Kozlov
相关产品推荐
相关产品推荐

