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

WordPress Docker Compose环境无法访问:连接重置问题求助

WordPress无法访问问题排查与解决

核心问题

你使用的wordpress:6.2.0-php8.2-fpm是PHP-FPM专用镜像,仅提供FastCGI协议的PHP处理服务,本身没有内置HTTP服务器(如Apache/Nginx)。你把主机的9500端口映射到容器的80端口,但容器内80端口根本没有服务监听,这就是curl返回连接重置的原因。从容器日志也能看到,服务启动的是FPM进程,监听的是9000端口而非80端口。

解决方案

方案1:更换为带Web服务器的WordPress镜像

直接使用默认的WordPress镜像(内置Apache),把image: 'wordpress:6.2.0-php8.2-fpm'替换为:

image: wordpress:6.2.0-php8.2

这个镜像内置Apache,会监听容器的80端口,映射后就能正常通过localhost:9500访问。

方案2:添加Nginx容器反向代理PHP-FPM

如果需要保留FPM架构,需新增Nginx服务来处理HTTP请求并转发到FPM:
修改docker-compose.yml,添加nginx服务:

version: '3.9'
services:
  db:
    # 保持原db配置不变
    container_name: 'mysql8.0'
    image: 'mysql:8.0.32'
    volumes:
      - ./data/mysql:/var/lib/mysql
    command: mysqld --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    restart: always
    tty: true
    ports:
      - 18766:3306
    environment:
      - MYSQL_ROOT_PASSWORD
      - MYSQL_DATABASE
      - MYSQL_USER
      - MYSQL_PASSWORD
    networks:
      - wp
  wordpress:
    container_name: 'wordpress-app'
    depends_on:
      - db
    image: 'wordpress:6.2.0-php8.2-fpm'
    # 移除80/443端口映射,不需要对外暴露
    environment:
      - WORDPRESS_DB_HOST
      - WORDPRESS_DB_USER
      - WORDPRESS_DB_PASSWORD
      - WORDPRESS_DB_NAME
      - WORDPRESS_CONFIG_EXTRA
    volumes:
      - "./wordpress:/var/www/html"
      - "./wp-content:/var/www/html/wp-content"
    networks:
      - wp
  nginx:
    image: nginx:alpine
    depends_on:
      - wordpress
    ports:
      - 9500:80
      - 443:443
    volumes:
      - "./wordpress:/var/www/html"
      # 需创建nginx配置文件,路径自行调整
      - "./nginx/conf.d:/etc/nginx/conf.d"
    networks:
      - wp
  phpmyadmin:
    depends_on:
      - db
    # 注意:phpmyadmin的fpm镜像同样需要Web服务器,这里换默认镜像
    image: phpmyadmin:5.2.1
    restart: always
    ports:
      - 8080:80
    environment:
      - PMA_HOST
      - MYSQL_ROOT_PASSWORD
    networks:
      - wp
networks:
  wp:
    driver: bridge

然后创建nginx/conf.d/wordpress.conf配置文件:

server {
    listen 80;
    server_name localhost;
    root /var/www/html;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        fastcgi_pass wordpress:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

附用户提供的排查信息

docker-compose配置

version: '3.9'
services:
  db:
    container_name: 'mysql8.0'
    image: 'mysql:8.0.32'
    volumes:
      - ./data/mysql:/var/lib/mysql
    command: mysqld --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    restart: always
    tty: true
    ports:
      - 18766:3306
    expose:
      - '18766'
    environment:
      - MYSQL_ROOT_PASSWORD
      - MYSQL_DATABASE
      - MYSQL_USER
      - MYSQL_PASSWORD
    networks:
      - wp
  wordpress:
    container_name: 'wordpress-app'
    depends_on:
      - db
    image: 'wordpress:6.2.0-php8.2-fpm'
    ports:
      - 9000:80
      - 443:443
    environment:
      - WORDPRESS_DB_HOST
      - WORDPRESS_DB_USER
      - WORDPRESS_DB_PASSWORD
      - WORDPRESS_DB_NAME
      - WORDPRESS_CONFIG_EXTRA
    volumes:
      - "./wordpress:/var/www/html"
      - "./wp-content:/var/www/html/wp-content"
    networks:
      - wp
  phpmyadmin:
    depends_on:
      - db
    image: phpmyadmin:5.2.1-fpm
    restart: always
    ports:
      - 8080:80
    environment:
      - PMA_HOST
      - MYSQL_ROOT_PASSWORD
    networks:
      - wp
networks:
  wp:
    driver: bridge

docker ps输出

CONTAINER ID   IMAGE                        COMMAND                  CREATED          STATUS         PORTS                                                                                    NAMES
4f9b98c82125   wordpress:6.2.0-php8.2-fpm   "docker-entrypoint.s…"   5 minutes ago    Up 5 minutes                                                                                            elastic_rosalind
6e17a7fddc25   phpmyadmin:5.2.1-fpm         "/docker-entrypoint.…"   33 minutes ago   Up 7 minutes   9000/tcp, 0.0.0.0:8888->80/tcp, :::8888->80/tcp                                          first-plugin-phpmyadmin-1
3bc899ca693e   wordpress:6.2.0-php8.2-fpm   "docker-entrypoint.s…"   33 minutes ago   Up 7 minutes   0.0.0.0:443->443/tcp, :::443->443/tcp, 9000/tcp, 0.0.0.0:9500->80/tcp, :::9500->80/tcp   wordpress-app
2fb6f5614931   mysql:8.0.32                 "docker-entrypoint.s…"   33 minutes ago   Up 7 minutes   18766/tcp, 33060/tcp, 0.0.0.0:18766->3306/tcp, :::18766->3306/tcp                        mysql8.0

curl测试结果

curl -v localhost:9500

*   Trying 127.0.0.1:9500...
* Connected to localhost (127.0.0.1) port 9500 (#0)
> GET / HTTP/1.1
> Host: localhost:9500
> User-Agent: curl/7.81.0
> Accept: */*
> 
* Recv failure: Connection reset by peer
* Closing connection 0
curl: (56) Recv failure: Connection reset by peer

netstat监听状态

sudo netstat -tulpn | grep LISTEN
[sudo] password for davidshare: 
tcp        0      0 0.0.0.0:18766           0.0.0.0:*               LISTEN      19727/docker-proxy  
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      19901/docker-proxy  
tcp        0      0 0.0.0.0:8888            0.0.0.0:*               LISTEN      19849/docker-proxy  
tcp        0      0 0.0.0.0:9500            0.0.0.0:*               LISTEN      19868/docker-proxy  
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      1461/cupsd          
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      1233/systemd-resolv 
tcp6       0      0 :::18766                :::*                    LISTEN      19733/docker-proxy  
tcp6       0      0 :::443                  :::*                    LISTEN      19912/docker-proxy  
tcp6       0      0 :::80                   :::*                    LISTEN      1628/apache2        
tcp6       0      0 :::1716                 :::*                    LISTEN      10204/kdeconnectd   
tcp6       0      0 127.0.0.1:9614          :::*                    LISTEN      10216/java          
tcp6       0      0 ::1:631                 :::*                    LISTEN      1461/cupsd          
tcp6       0      0 :::9000                 :::*                    LISTEN      20905/php-fpm: mast 
tcp6       0      0 :::8888                 :::*                    LISTEN      19856/docker-proxy  
tcp6       0      0 :::9500                 :::*                    LISTEN      19876/docker-proxy

WordPress容器日志

docker logs wordpress-app

[02-Apr-2023 16:19:05] NOTICE: fpm is running, pid 1
[02-Apr-2023 16:19:05] NOTICE: ready to handle connections
[02-Apr-2023 16:35:35] NOTICE: Finishing ...
[02-Apr-2023 16:35:35] NOTICE: exiting, bye-bye!
[02-Apr-2023 16:44:32] NOTICE: fpm is running, pid 1
[02-Apr-2023 16:44:32] NOTICE: ready to handle connections

内容的提问来源于stack exchange,提问作者David Essien

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 20:45:16