You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确配置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 10:40:18