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

Docker Swarm环境下PhpMyAdmin与Traefik V2配置出现404错误排查

问题分析与修复方案

针对你在Docker Swarm中部署PhpMyAdmin+MariaDB栈时遇到的404错误,结合你的配置文件,核心问题出在Traefik的端口配置和冗余的端口映射上,以下是具体修复步骤:

1. 修正Traefik负载均衡端口

Traefik通过Docker内部网络直接与容器通信,不需要使用宿主映射的端口。你的配置中traefik.http.services.pma_phpmyadmin.loadbalancer.server.port设为了8081(宿主端口),但phpmyadmin容器内部实际监听的是80端口,这会导致Traefik无法正确转发请求到容器。

将该配置项改为:

traefik.http.services.pma_phpmyadmin.loadbalancer.server.port=80

2. 移除冗余的ports字段

在Swarm模式下,通过Traefik反向代理访问容器时,不需要暴露ports到宿主节点,这个配置不仅多余,还可能导致网络冲突。直接删除phpmyadmin服务下的:

ports:
  - 8081:80

3. 验证PMA_ABSOLUTE_URI配置

确保PMA_ABSOLUTE_URI的值与你实际访问的域名完全一致,比如如果你的访问地址是https://pma.example.com,该变量就保持当前配置即可,不要添加额外的路径或拼写错误。

修正后的完整配置

version: '3.1'

services:
  db:
    image: mariadb:10.6
    environment:
      MYSQL_ROOT_PASSWORD: ********
    networks:
      - backend
    volumes:
      - db-data:/db
    deploy:
      placement:
        constraints:
          - node.labels.db.db-data == true

  phpmyadmin:
    image: phpmyadmin
    environment:
      - PMA_ARBITRARY=1
      - PMA_ABSOLUTE_URI=https://pma.example.com
    networks:
      - backend
      - traefik-public
    labels:
        - traefik.enable=true
        - traefik.docker.network=traefik-public
        - traefik.constraint-label=traefik-public
        - traefik.http.routers.pma_phpmyadmin-http.rule=Host(`${DOMAIN?Variable not set}`)
        - traefik.http.routers.pma_phpmyadmin-http.entrypoints=http
        - traefik.http.routers.pma_phpmyadmin-http.middlewares=https-redirect
        - traefik.http.routers.pma_phpmyadmin-https.rule=Host(`${DOMAIN?Variable not set}`)
        - traefik.http.routers.pma_phpmyadmin-https.entrypoints=https
        - traefik.http.routers.pma_phpmyadmin-https.tls=true
        - traefik.http.routers.pma_phpmyadmin-https.tls.certresolver=le
        - traefik.http.services.pma_phpmyadmin.loadbalancer.server.port=80

networks:
  traefik-public:
    external: true
  backend:
    external: false

volumes:
  db-data:

验证步骤

  1. 重新部署栈:
docker stack deploy -c pma-db.yml pma-db
  1. 查看Traefik的dashboard,确认phpmyadmin的路由和服务是否正常注册
  2. 访问你的PMA域名,检查是否能正常加载

内容的提问来源于stack exchange,提问作者Maxime Serret

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 15:25:15