部署phpmyadmin:fpm-alpine容器后无法访问,求排查缺失参数
问题排查与解决方案
嘿,我一眼就发现问题所在啦!你选用的phpmyadmin/phpmyadmin:fpm-alpine是FPM(FastCGI Process Manager)版本的镜像,这个版本本身不包含Web服务器(比如Nginx或Apache),它只负责处理PHP请求。所以你直接把容器的80端口映射到主机是没用的——没有Web服务器来接收和转发HTTP请求给FPM服务。
下面给你两种可行的解决方案:
方案1:切换到带Web服务器的phpMyAdmin镜像
最简单的办法是换成默认的phpMyAdmin镜像(自带Apache服务器),或者用带Web服务器的alpine版本。修改你的docker-compose.yml如下:
version: "3" services: mysql: image: mysql:5.7.29 container_name: mysql restart: always environment: MYSQL_ROOT_PASSWORD: root MYSQL_USER: mysql MYSQL_PASSWORD: mysql ports: - "3306:3306" phpmyadmin: # 换成自带Apache的镜像,去掉fpm前缀 image: phpmyadmin/phpmyadmin:alpine container_name: phpmyadmin restart: always ports: - "8085:80" environment: PMA_HOST: mysql PMA_USER: mysql PMA_PASSWORD: mysql
保存后重新启动容器:
docker-compose down && docker-compose up -d
现在访问http://localhost:8085应该就能正常打开phpMyAdmin了。
方案2:保留FPM镜像,添加Nginx配合使用
如果你坚持要用FPM版本的镜像,需要额外部署一个Nginx容器来转发请求。修改docker-compose.yml如下:
version: "3" services: mysql: image: mysql:5.7.29 container_name: mysql restart: always environment: MYSQL_ROOT_PASSWORD: root MYSQL_USER: mysql MYSQL_PASSWORD: mysql ports: - "3306:3306" phpmyadmin: image: phpmyadmin/phpmyadmin:fpm-alpine container_name: phpmyadmin restart: always environment: PMA_HOST: mysql PMA_USER: mysql PMA_PASSWORD: mysql # 不需要映射80端口,而是让Nginx连接它的9000端口(FPM默认端口) nginx: image: nginx:alpine container_name: nginx_pma restart: always ports: - "8085:80" volumes: # 挂载自定义Nginx配置文件,你需要先创建这个文件 - ./nginx.conf:/etc/nginx/conf.d/default.conf depends_on: - phpmyadmin
然后在当前目录创建nginx.conf文件,内容如下:
server { listen 80; server_name localhost; root /usr/share/phpmyadmin; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { fastcgi_pass phpmyadmin:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
同样重启容器后,访问http://localhost:8085即可。
额外:关于你单独用docker run的问题
你之前用两个独立的docker run命令时,两个容器不在同一个Docker网络里,所以phpMyAdmin无法解析PMA_HOST=db。解决办法是先创建一个自定义网络,再让两个容器加入这个网络:
# 创建自定义网络 docker network create pma-network # 启动MySQL容器并加入网络 docker run --rm --network pma-network -e MYSQL_ROOT_PASSWORD=root -e MYSQL_USER=mysql -e MYSQL_PASSWORD=mysql -p 3306:3306 --name db mysql:5.7.29 # 启动phpMyAdmin(用带Web服务器的镜像)并加入同一网络 docker run --rm --network pma-network -e PMA_HOST=db -e PMA_USER=mysql -e PMA_PASSWORD=mysql -p 8085:80 --name phpmyadmin phpmyadmin/phpmyadmin:alpine
这样两个容器就能互相通信了。
内容的提问来源于stack exchange,提问作者Jaeyson
相关产品推荐
相关产品推荐

