【问题标题】:Why connection between phpmyadmin and mysql docker container doesn't work为什么phpmyadmin和mysql docker容器之间的连接不起作用
【发布时间】:2019-12-17 22:44:12
【问题描述】:

我正在尝试将 phpmyadmin-container 连接到 mysql-container 以查看数据库。 phpmyadmin web 界面返回错误Cannot log in to the MySQL server 和mysqli_real_connect(): (HY000/2002): No route to host。 我究竟做错了什么?谢谢。

我使用这个操作:

  1. docker-compose down && docker-compose up -d
  2. 在网络浏览器中输入http://localhost:8080
  3. 我用用户root登录,密码test
  4. 获取上述错误

我的 docker-compose.yml

version: '2'
services:
  db:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: test
    ports:
      - "3306:3306"
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    links:
      - db
    ports:
      - "8080:80"

【问题讨论】:

    标签: mysql linux docker phpmyadmin


    【解决方案1】:

    见official guide:

    您需要指定一些环境才能链接到外部 mysql 容器:

    环境变量汇总

    PMA_ARBITRARY - when set to 1 connection to the arbitrary server will be allowed
    PMA_HOST - define address/host name of the MySQL server
    PMA_VERBOSE - define verbose name of the MySQL server
    PMA_PORT - define port of the MySQL server
    PMA_HOSTS - define comma separated list of address/host names of the MySQL servers
    PMA_VERBOSES - define comma separated list of verbose names of the MySQL servers
    PMA_PORTS - define comma separated list of ports of the MySQL servers
    PMA_USER and PMA_PASSWORD - define username to use for config authentication method
    PMA_ABSOLUTE_URI - define user-facing URI
    

    对你来说,mysql名字是db,所以你需要做next:

    version: '2'
    services:
      db:
        image: mysql
        environment:
          MYSQL_ROOT_PASSWORD: test
        ports:
          - "3306:3306"
        command: --default-authentication-plugin=mysql_native_password
      phpmyadmin:
        image: phpmyadmin/phpmyadmin
        ports:
          - "8080:80"
        environment:
          PMA_HOSTS: db
    

    另外,--link 已弃用,删除即可,docker-compose 会自动为您设置网络,让容器在 dns 帮助下互相看到。

    【讨论】:

    • 我正在尝试您的考试,但它对我不起作用。所以我追加PMA_PORTS: 8080还是不行。据我了解“环境变量汇总”,本例中无需设置其他变量。
    • 尝试将command: --default-authentication-plugin=mysql_native_password添加到mysql服务以更改默认身份验证,请参阅更新答案。请记住删除--link,并且在您知道要添加的内容之前不要添加其他内容,首先尝试该示例而不进行任何修改。并且在docker-compose up之前先做docker-compose down。
    • 这意味着 PMA_ARBITRARY - 当设置为 1 时,将允许连接到任意服务器?
    • 是的。如果设置为 1,您将在登录页面中输入任何服务器,这将不限于您在 PMA_HOSTS 中定义的服务器。但与使用$cfg['AllowArbitraryServer'] 的物理环境不同,在 docker 环境中,您仍然需要确保目标服务器在 phpmyadmin 的同一网络中,例如所有服务的名称在同一个 dockerfile 中,默认 docker 网络可以互相访问。
    猜你喜欢
    • 2016-12-27
    • 2014-11-23
    • 2020-02-13
    • 2023-03-21
    • 2020-01-17
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多