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
相关产品推荐
相关产品推荐

