Docker中运行已有PHP本地测试应用的问题求助
搞定Docker本地测试PHP网站的简单方案
我完全懂你的困惑——PHP确实自带了适合本地测试的内置服务器,但你刚才的操作没踩对点子!直接跑php index.php只是执行脚本输出,根本没启动HTTP服务进程,所以端口映射等于白设,自然访问不了localhost:8080。咱们用官方PHP镜像就能快速搞定,不用那些复杂的多服务镜像,一步步来:
1. 直接启动PHP内置服务器容器
不用进入bash再手动执行命令,直接一条命令搞定:
docker run -it --rm -p 8080:8000 -v /Users/jans/Developer/sfolder:/usr/src/myapp -w /usr/src/myapp php:5.6 php -S 0.0.0.0:8000
这里几个关键参数的作用:
-p 8080:8000:把你本地的8080端口映射到容器内的8000端口(PHP内置服务器默认监听8000)-v /Users/jans/Developer/sfolder:/usr/src/myapp:把你本地的网站代码目录挂载到容器里的指定路径-w /usr/src/myapp:设置容器的工作目录为挂载的代码目录php -S 0.0.0.0:8000:启动PHP内置服务器,监听容器内所有网卡的8000端口(必须写0.0.0.0,不然本地访问不到容器里的服务)
2. 验证访问
命令执行后,容器会输出类似PHP 5.6.40 Development Server started at ...的日志,这时候打开浏览器访问localhost:8080,就能看到你的网站了!
3. 为什么之前的操作没效果?
你之前进入容器后跑php index.php,只是让PHP解释执行了index.php的代码,输出内容只会显示在容器的终端里,并没有启动一个可以对外提供HTTP服务的进程。只有用php -S命令,才会启动内置的HTTP服务器,这时候端口映射才会生效,本地才能通过浏览器访问。
4. 如果需要模拟生产环境(可选)
要是你之后想测试更接近生产环境的配置(比如用Nginx+PHP-FPM),不用用那种复杂的多合一镜像,自己写个简单的docker-compose.yml就能搞定:
version: '3' services: php-fpm: image: php:5.6-fpm volumes: - /Users/jans/Developer/sfolder:/var/www/html nginx: image: nginx:alpine ports: - "8080:80" volumes: - /Users/jans/Developer/sfolder:/var/www/html - ./nginx.conf:/etc/nginx/conf.d/default.conf
再写个简单的nginx.conf配置反向代理到PHP-FPM就行,不过这是进阶需求,先把本地测试的简单场景跑通再说。
内容的提问来源于stack exchange,提问作者jean d'arme
相关产品推荐
相关产品推荐

