首页 > 解决方案 > docker phpmyadmin 和 nginx 无法通过 phpmyadmin mysqli_real_connect() 登录到 db

问题描述

我正在尝试将 docker 用于我的项目,此时我正在尝试配置 Mysql 和 Phpmyadmin。我使用了以下配置,但是当我尝试登录 php myadmin 时,它给了我错误:请看这张图片:

phpmyadmin 错误

我阅读了许多类似的主题,但我仍然无法解决它.. 我该如何解决这个问题?

这是我的 docker-compose 文件:

version: "3"

services:
  db:
    image: mariadb
    container_name: mariadb
    environment:
      - MYSQL_DATABASE=academy
      - MYSQL_USER=root
      - MYSQL_PASSWORD=root
      - MYSQL_ROOT_PASSWORD=root
    volumes:
      - ./db:/var/lib/mysql
    ports:
      - "3306:3306"
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: phpMyAdmin
    restart: always
    environment:
      - "PMA_HOST=mariadb"
      - "PMA_PORT=3306"
      - "PMA_ABSOLUTE_URI=http://phpmyadmin.your.domain"
    ports:
      - 8181:80
    links:
      # for mysql container
      - "db:db"
    volumes:
      - "./phpmyadmin/sessions:/sessions"
  web:
    build: ./DDGN
    container_name: gunicorn
    command: gunicorn -c gunicorn.conf DDGN.wsgi
    volumes:
      - ./DDGN:/DDGN
    ports:
      - "8000:8000"

  nginx:
    build: "./nginx"
    container_name: nginx
    depends_on:
      - web
    command: nginx -g 'daemon off;'
    ports:
      - "80:80"

    volumes:
      - ./DDGN/static:/var/www/static/
      - ./DDGN/media:/var/www/media
    external_links:
      - mariadb:mariadb
      - phpmyadmin:phpmyadmin

这是我的 ngnix.conf 文件:

user  nginx;

worker_processes  1;

events {
    worker_connections   1024;
}

http {

    include       /etc/nginx/mime.types;
    client_max_body_size 1024M;

    server {
        listen        80;
        charset       utf-8;
        server_name   django.com;

        access_log /dev/stdout;
        error_log   /dev/stdout info;


        location /media/ {
          alias /var/www/media/;
        }

        location /static/ {
          alias /var/www/static/;
        }

        location /pma {
              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;
              proxy_pass          http://phpmyadmin/; #! phpmyadmin is the docker host !
              proxy_read_timeout  90;
        }

        location / {
            proxy_pass         http://web:8000;
            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-Host   $server_name;

        }
    }
}

更新*额外信息:

我有这个日志:

mariadb       | 2019-01-27 19:10:58 0 [Note] InnoDB: Using Linux native AIO
mariadb       | 2019-01-27 19:10:58 0 [Note] InnoDB: Mutexesand rw_locks use GCC atomic builtins
mariadb       | 2019-01-27 19:10:58 0 [Note] InnoDB: Uses event mutexes
mariadb       | 2019-01-27 19:10:58 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
mariadb       | 2019-01-27 19:10:58 0 [Note] InnoDB: Number of pools: 1
mariadb       | 2019-01-27 19:10:58 0 [Note] InnoDB: Using SSE2 crc32 instructions
mariadb       | 2019-01-27 19:10:58 0 [Note] InnoDB: Initializing buffer pool, total size = 256M, instances = 1, chunk size = 128M
mariadb       | 2019-01-27 19:10:58 0 [Note] InnoDB: Completed initialization of buffer pool
mariadb       | 2019-01-27 19:10:58 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().
mariadb       | 2019-01-27 19:10:58 0 [ERROR] InnoDB: Invalid flags 0x4800 in ./ibdata1
mariadb       | 2019-01-27 19:10:58 0 [ERROR] InnoDB: Plugininitialization aborted with error Data structure corruption
mariadb       | 2019-01-27 19:10:59 0 [Note] InnoDB: Starting shutdown...
mariadb       | 2019-01-27 19:10:59 0 [ERROR] Plugin 'InnoDB' init function returned error.
mariadb       | 2019-01-27 19:10:59 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
mariadb       | 2019-01-27 19:10:59 0 [Note] Plugin 'FEEDBACK' is disabled.
mariadb       | 2019-01-27 19:10:59 0 [ERROR] Could not openmysql.plugin table. Some plugins may be not loaded
mariadb       | 2019-01-27 19:10:59 0 [ERROR] Unknown/unsupported storage engine: InnoDB
mariadb       | 2019-01-27 19:10:59 0 [ERROR] Aborting
mariadb       |
mariadb exited with code 1

标签: dockerdocker-composedockerfile

解决方案


遇到此类错误时,最好先检查日志。

$ docker-compose logs -f
...
mariadb       | ERROR 1396 (HY000) at line 1: Operation CREATE USER failed for 'root'@'%'

此错误是因为root已在 MariaDB 映像中创建了用户。要解决此问题,请删除MYSQL_USERMYSQL_PASSWORD环境变量。就够MYSQL_ROOT_PASSWORD了。

environment:
  - MYSQL_DATABASE=academy
  - MYSQL_ROOT_PASSWORD=root

推荐阅读