docker phppyadmin container拒绝用户'root'访问

时间:2018-03-30 03:48:52

标签: mysql docker phpmyadmin

我已成功在 digitalocean Droplet上安装了docker,下面显示了我的 docker-compose.yml 配置:

version: '2.1'
services:

  mysql:
    build:
      context: ./docker/mysql
    image: mysql:latest
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: root_pass
      MYSQL_USER: root
      MYSQL_PASSWORD: root_pass
    volumes:
      - mysqldata:/var/lib/mysql

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: phpmyadmin
    links:
      - mysql:db
    environment: 
      MYSQL_USERNAME: root
      MYSQL_ROOT_PASSWORD: root_pass
    restart: always
    ports: 
      - 8080:80

一旦我登上了docker服务,一切正常,你可以通过下面的屏幕截图看到。 enter image description here

我可以使用我的用户凭据完全访问终端内的mysql数据库。

enter image description here

但问题是,当我尝试使用droplet_ip:8080访问phpmyadmin时,它说:

 #1045 - Access denied for user 'root'@'172.18.0.4' (using password: YES)

在这里我也使用了相同的用户名(root)密码(root_pass)。

对此问题的任何建议都将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:3)

以下为我工作

version: '3.1'
volumes:
  mysql-volume:

services:
  mysql:
    image: mysql
    container_name: mysql
    volumes:
     - mysql-volume:/var/lib/mysql
    environment:
     MYSQL_ROOT_PASSWORD: rootpass
     MYSQL_DATABASE: db
     MYSQL_USER: user
     MYSQL_PASSWORD: supersecret

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: phpmyadmin
    environment:
      PMA_HOST: mysql
      MYSQL_USER: user
      MYSQL_PASSWORD: supersecret
    ports:
      - 80:80
    depends_on:
      - mysql

不要混淆root用户和MySQL用户。在上面的例子中,我使用MySQL用户使用phpadmin登录。如果你想使用root用户登录,你不必指定MySQL用户,它看起来像这样(你不需要为phpmyadmin指定用户,因为它总是root用户):

version: '3.1'
volumes:
  mysql-volume:

services:
  mysql:
    image: mysql
    container_name: mysql
    volumes:
     - mysql-volume:/var/lib/mysql
    environment:
     MYSQL_ROOT_PASSWORD: rootpass
     MYSQL_DATABASE: db

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: phpmyadmin
    environment:
      PMA_HOST: mysql
      MYSQL_ROOT_PASSWORD: rootpass
    ports:
      - 80:80
    depends_on:
      - mysql

同样非常重要的是,当您想要重新创建整个设置时,请删除您的mysql卷。 (docker volume rm ..)。因为在进行更改后,您的mysql可能会再次使用相同的卷启动。

答案 1 :(得分:0)

我遇到了访问被拒绝的错误,因为我的密码中有一个美元符号,docker撰写文件将其解析为变量替换(我只见过${}语法),您在this页面上将显示为“同时支持$VARIABLE${VARIABLE}语法。

因此,例如,如果我在docker compose file: hello$world中使用此密码作为我的数据库密码,则将替换world变量,当然我没有'world'变量,该密码将被设置在这种情况下,将是hello,因此在不知道docker compose语法的情况下,您将尝试使用hello$world登录,并且将拒绝您访问。