Docker Compose配置:实现Nginx+PHPMyAdmin独立主机名访问
实现独立主机名访问PHPMyAdmin的配置指南
让我们一步步调整你的配置,搞定用database.example.com访问phpMyAdmin的需求:
1. 修正Docker Compose配置
首先调整docker-compose.yml里的几个关键问题:
- PHP服务需要加入
my-network网络,这样Nginx容器才能访问到PHP-FPM服务 - 移除phpMyAdmin的端口映射(不需要直接暴露给主机,Nginx反向代理即可)
- 修复Nginx容器的环境变量替换命令,避免配置生成失败
修改后的完整docker-compose.yml如下:
version: '3' services: web: image: nginx:alpine container_name: nginx volumes: - "./etc/nginx/default.conf:/etc/nginx/conf.d/default.conf" - "./etc/ssl:/etc/ssl" - "./repo:/var/www/html" - "./etc/nginx/default.template.conf:/etc/nginx/conf.d/default.template" ports: - "80:80" - "443:443" environment: - NGINX_HOST=example.com networks: - my-network # 修复envsubst的变量,用正确的环境变量名NGINX_HOST command: /bin/sh -c "envsubst '$NGINX_HOST' < /etc/nginx/conf.d/default.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'" restart: always depends_on: - php - mysql php: image: bitnami/php-fpm:8.0.10 container_name: php restart: always volumes: - "./etc/php/php.ini:/usr/local/etc/php/conf.d/php.ini" - "./repo:/var/www/html" # 添加网络配置,让PHP和其他服务在同一网络 networks: - my-network phpmyadmin: image: phpmyadmin/phpmyadmin container_name: phpmyadmin environment: - PMA_ARBITRARY=1 - PMA_HOST=mysql networks: - my-network restart: always depends_on: - mysql mysql: image: mysql:8.0.27 container_name: mysql restart: always env_file: - ".env" environment: - MYSQL_DATABASE=database - MYSQL_ROOT_PASSWORD=root - MYSQL_USER=admin - MYSQL_PASSWORD=admin ports: - "8989:3306" volumes: - "./data/db/mysql:/var/lib/mysql" networks: - my-network networks: my-network: driver: bridge
2. 调整Nginx配置
接下来修改Nginx的配置文件,解决两个核心问题:PHP-FPM的访问方式,以及phpMyAdmin的反向代理优化:
2.1 修复PHP请求处理
因为PHP和Nginx是两个独立容器,不能用Unix套接字通信,需要改成通过网络访问PHP-FPM的9000端口(默认端口),同时补上你之前漏写的空格:
server { listen 80; server_name example.com; root /var/www/html/public; ... location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_intercept_errors on; # 替换为PHP容器的服务名+端口 fastcgi_pass php:9000; } ... }
2.2 完善phpMyAdmin的反向代理
给database.example.com的server块添加必要的请求头,避免phpMyAdmin出现跳转异常或权限问题:
server { listen 80; server_name database.example.com; location / { proxy_pass http://phpmyadmin:80; # 添加必要的代理头 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 支持websocket(适配phpMyAdmin的实时功能) proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }
3. 重启容器生效
执行以下命令重启所有服务,让配置生效:
docker-compose down && docker-compose up -d
4. 测试访问
现在打开浏览器验证:
http://example.com:正常访问你的站点http://database.example.com:看到phpMyAdmin登录界面,用MySQL的root账号和你设置的root密码即可登录
内容的提问来源于stack exchange,提问作者PhilipCodeX
相关产品推荐
相关产品推荐

