如何正确配置Docker Swarm中的PHP服务以实现外部网络访问?
解决方案
1. 排查服务实际运行状态
先确定php_test_php_test服务运行在哪个Swarm节点:
sudo docker service ps php_test_php_test
登录该节点,查看容器日志确认PHP内置服务器是否正常启动:
# 替换为实际容器ID sudo docker logs <container-id>
如果日志显示监听失败,大概率是启动命令格式错误导致的。
2. 修正docker-compose.yaml配置
你的配置存在两个关键问题:
- Swarm不支持
container_name和restart参数(部署时已提示忽略),需直接删除这两项。 - PHP内置服务器的启动命令格式错误,
-S参数后不需要等于号,正确写法为php -S 0.0.0.0:3030 -t /var/www/html。
修正后的配置文件:
version: '3' services: php_test: image: nanoninja/php-fpm:8.1 ports: - "3030:3030" command: php -S 0.0.0.0:3030 -t /var/www/html
3. 重新部署服务
先删除旧栈:
sudo docker stack rm php_test
等待几秒后重新部署:
sudo docker stack deploy -c ./docker-compose.yaml php_test
4. 验证访问
等服务启动完成后,先在服务运行的节点本地测试:
curl http://localhost:3030
如果能正常返回内容,再从外部网络访问该节点的IP(例如http://192.168.0.151:3030)。
当前端口配置*:3030->3030/tcp已经启用Swarm路由网格,只要服务正常运行,访问任意Swarm节点的3030端口都会自动转发到运行服务的容器。
内容的提问来源于stack exchange,提问作者Sergey Kozlov
相关产品推荐
相关产品推荐

