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

部署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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 11:28:11