Docker部署TYPO3 v12项目遇404错误求助
TYPO3 v12 + Docker + Traefik 404 问题排查与修复
问题描述
使用Docker与Traefik部署的TYPO3 v12项目此前运行正常,近期访问http://myproject.localhost/typo3时突然出现404 page not found错误,不确定是否因文件损坏导致,需要调试与修复方案。
现有配置与日志
Traefik 配置
version: '3' networks: web: external: true services: traefik: image: traefik:v2.4 container_name: traefik command: - "--log.level=DEBUG" - "--api.insecure=true" - "--providers.docker=true" - "--providers.docker.exposedbydefault=false" - "--entrypoints.web.address=:80" restart: always ports: - "80:80" - "7000:8080" # The Web UI (enabled by --api) networks: - web volumes: - /var/run/docker.sock:/var/run/docker.sock
项目 Docker Compose 配置
services: database: container_name: myproject_database image: mysql:8.0 working_dir: /var/www/html volumes: - database:/var/lib/mysql:cached networks: - stack restart: always environment: - MYSQL_RANDOM_ROOT_PASSWORD=true - MYSQL_DATABASE=myproject - MYSQL_USER=myproject - MYSQL_PASSWORD=myproject command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --sql_mode='' application: container_name: myproject_application build: context: . dockerfile: ./docker/application/application.Dockerfile args: USER_ID: $USER_ID GROUP_ID: $GROUP_ID depends_on: - database extra_hosts: - 'myproject.localhost:127.0.0.1' networks: - web - stack labels: - "traefik.enable=true" # Entity - "traefik.http.routers.myproject.rule= Host(`myproject.localhost`) || Host(`360.myproject.localhost`) )" - "traefik.http.routers.myproject.entrypoints=web" - "traefik.http.routers.myproject_ssl.rule= Host(`myproject.localhost`) || Host(`360.myproject.localhost`) " - "traefik.http.routers.myproject_ssl.entrypoints=websecure" - "traefik.http.routers.myproject_ssl.tls=true" - "traefik.http.services.myproject.loadbalancer.server.port=80" - "traefik.docker.network=web" working_dir: /var/www/html volumes: - ./docker/application/php.ini:/usr/local/etc/php/php.ini:cached - ./:/var/www/html restart: always tooling: container_name: myproject_tooling build: context: . dockerfile: ./docker/tooling/tooling.Dockerfile args: USER_ID: $USER_ID GROUP_ID: $GROUP_ID networks: - stack tty: true working_dir: /var/www/html volumes: - ./:/var/www/html restart: always caching: image: redis:7.0 restart: always networks: - stack networks: web: external: true stack: external: false volumes: database:
Traefik 错误日志
time="2025-12-01T14:56:24Z" level=error msg="Provider connection error Error response from daemon: , retrying in 2.244889923s" providerName=docker time="2025-12-01T14:56:27Z" level=error msg="Failed to retrieve information of the docker client and server host: Error response from daemon: " providerName=docker time="2025-12-01T14:56:27Z" level=error msg="Provider connection error Error response from daemon: , retrying in 7.05598259s" providerName=docker time="2025-12-01T14:56:34Z" level=error msg="Failed to retrieve information of the docker client and server host: Error response from daemon: " providerName=docker time="2025-12-01T14:56:34Z" level=error msg="Provider connection error Error response from daemon: , retrying in 11.90132241s" providerName=docker time="2025-12-01T14:56:46Z" level=error msg="Failed to retrieve information of the docker client and server host: Error response from daemon: " providerName=docker time="2025-12-01T14:56:46Z" level=error msg="Provider connection error Error response from daemon: , retrying in 10.919562466s" providerName=docker
应用容器日志
other logs: [Sun Nov 30 16:11:07.041728 2025] [mpm_prefork:notice] [pid 1:tid 1] AH00170: caught SIGWINCH, shutting down gracefully [Mon Dec 01 14:31:02.162197 2025] [mpm_prefork:notice] [pid 1:tid 1] AH00163: Apache/2.4.65 (Debian) PHP/8.2.29 configured -- resuming normal operations
排查与修复步骤
1. 优先解决 Traefik 与 Docker 守护进程的连接问题
从Traefik日志看,核心问题是Traefik无法连接Docker守护进程,这会导致Traefik无法识别和路由到你的TYPO3应用容器,直接引发404。
检查Docker套接字权限:
Traefik容器挂载了/var/run/docker.sock,执行以下命令检查套接字权限:ls -l /var/run/docker.sock如果权限不是
root:docker,执行:sudo chown root:docker /var/run/docker.sock sudo chmod 660 /var/run/docker.sock然后重启Traefik容器:
docker restart traefik验证Traefik Web UI:
访问http://localhost:7000,查看是否能看到已注册的路由myproject。如果看不到,说明Traefik没识别到应用容器,继续下一步。修复应用容器的Traefik标签语法错误:
应用容器的myproject.rule末尾多了一个冗余的),修正后的标签应为:- "traefik.http.routers.myproject.rule=Host(`myproject.localhost`) || Host(`360.myproject.localhost`)" - "traefik.http.routers.myproject_ssl.rule=Host(`myproject.localhost`) || Host(`360.myproject.localhost`)"修正后重启应用容器:
docker-compose restart application
2. 验证TYPO3应用本身的可用性
排除Traefik问题后,直接访问应用容器内部,确认TYPO3是否正常:
- 进入应用容器内部测试:
如果返回404,说明问题出在TYPO3本身:docker exec -it myproject_application curl http://localhost/typo3- 检查
/var/www/html/typo3目录是否存在:
如果目录缺失,从备份恢复或重新部署TYPO3核心文件。docker exec myproject_application ls -l /var/www/html/typo3 - 检查Apache配置是否正确映射到TYPO3的
public目录:
查看应用容器内的Apache站点配置,确保DocumentRoot指向/var/www/html/public(TYPO3 v12的入口目录是public)。 - 清除TYPO3缓存:
使用tooling容器执行缓存清理:docker exec -it myproject_tooling php vendor/bin/typo3 cache:flush
- 检查
3. 其他排查点
- 检查Docker网络连通性:
确认Traefik和应用容器都在web外部网络中:
确保两个容器都在该网络的docker network inspect webContainers列表里。 - 重启整个服务栈:
若以上步骤无效,重启所有容器:docker-compose down && docker-compose up -d docker restart traefik
内容的提问来源于stack exchange,提问作者Mohamed Masmoudi
相关产品推荐
相关产品推荐

