【问题标题】:[Docker]: Connecting PHPMyAdmin to MySQL doesnt work[Docker]:将 PHPMyAdmin 连接到 MySQL 不起作用
【发布时间】:2016-12-27 12:31:44
【问题描述】:

我正在尝试将 PHPMyAdmin-Container 连接到 MySQL-Container 以查看数据库。

我已经通过$ docker run --name databaseContainer -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql启动了MySQL容器

和 PHPMyAdmin-Container 来自 $ docker run --name myadmin -d --link databaseContainer:mysql -p 8080:8080 phpmyadmin/phpmyadmin

尝试登录 PHPMyAdmin 时,我得到: mysqli_real_connect():php_network_getaddresses:getaddrinfo 失败:名称无法解析

mysqli_real_connect(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name does not resolve

顺便说一句,我还启动了一个 wordpress 容器,并将它链接到 mysql,在那里它可以工作...

【问题讨论】:

    标签: mysql docker phpmyadmin


    【解决方案1】:

    不要一一启动,而是使用docker-compose

    创建一个 docker-compose.yml 文件

    version: '2'
    services:
      db:
        image: mysql
        environment:
          MYSQL_ROOT_PASSWORD: my-secret-pw
        ports:
          # just if you also want to access it directly from you host
          # node neede for phpmyadmin
          - "3306:3306"
      phpmyadmin:
        image: phpmyadmin/phpmyadmin
        depends_on:
          - db
        ports:
          - "8080:8080"
    

    然后在您的docker-compose.yml 文件所在的同一文件夹中使用docker-compose up 启动它。 使用浏览器访问 PHPmyadmin 并使用 'db' 作为数据库的主机名,因为这是 docker-compose.yml 文件中的服务名称,因此可以使用 dockers 内部 DNS 服务将其解析为 docker-container 的实际 IP .所有链接都是自动为您设置的。

    这要简单得多 - docker run 使事情变得过于复杂,并且对这些事情不实用 - 从来没有。

    提示:如果您的机器上没有安装 docker-compose,请使用官方文档https://docs.docker.com/compose/install/ 安装它(超出范围)

    【讨论】:

    • 谢谢,它有效!我还发现,输入环境变量(DB-Host、User、PW)是一个选项,只是链接不起作用......
    • 您也可以在 docker compose 中输入所有这些 ENV 变量,但我想这很清楚
    • 我不知道您可以使用 'db' 作为主机名。谢谢!
    • 你应该在MYSQL_ROOT_PASSWORD后面加一个空格:
    【解决方案2】:

    就我而言,我使用的是 MySQL 8.0,结果发现 mysql 引入了 phpmyadmin 不支持的新密码识别。 见this answer

    【讨论】:

      【解决方案3】:

      我在使用 laradock 安装 docker,然后运行 ​​docker-compose up 时遇到了同样的错误。开箱即用,当您尝试登录 phpMyAdmin(使用截至 2018 年 10 月的当前图像)时,默认配置会引发此错误。使用 docker run 时不存在该错误。

      对于 docker-compose.yml(版本 3),原因之一是服务默认运行在不同的网络上。对于遇到此问题的其他人,这是适用于 mysql 和 phpmyadmin 的配置。

      在“docker-compose.yml”文件中,在“services”下:

      ### db ###################################################
          db:
            image: mysql:5.7
            container_name: db
            environment:
              - MYSQL_ROOT_PASSWORD=mypass
            networks:
             - backend
      
      ### MySQL ################################################
          mysql:
            build:
              context: ./mysql
              args:
                - MYSQL_VERSION=${MYSQL_VERSION}
            environment:
              - MYSQL_DATABASE=${MYSQL_DATABASE}
              - MYSQL_USER=${MYSQL_USER}
              - MYSQL_PASSWORD=${MYSQL_PASSWORD}
              - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
              - TZ=${WORKSPACE_TIMEZONE}
            volumes:
              - ${DATA_PATH_HOST}/mysql:/var/lib/mysql
              - ${MYSQL_ENTRYPOINT_INITDB}:/docker-entrypoint-initdb.d
            ports:
              - "${MYSQL_PORT}:3306"
            networks:
              - backend
      
      ## phpMyAdmin ###########################################
          phpmyadmin:
            build: ./phpmyadmin
            environment:
              - PMA_ARBITRARY=1
              - PMA_HOST=db
              - MYSQL_USER=${PMA_USER}
              - MYSQL_PASSWORD=${PMA_PASSWORD}
              - MYSQL_ROOT_PASSWORD=${PMA_ROOT_PASSWORD}
            ports:
              - "${PMA_PORT}:80"
            depends_on:
              - db
              - mysql
            networks:
              - frontend
              - backend
      

      编辑“.env”文件如下:

      ### MYSQL #################################################
      
      MYSQL_VERSION=5.7
      MYSQL_DATABASE=db
      MYSQL_USER=root
      MYSQL_PASSWORD=mypass
      MYSQL_PORT=3306
      MYSQL_ROOT_PASSWORD=mypass
      MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d
      
      ### PHP MY ADMIN ##########################################
      
      # Accepted values: mariadb - mysql
      
      PMA_DB_ENGINE=mysql
      
      # Credentials/Port:
      
      PMA_USER=default
      PMA_PASSWORD=secret
      PMA_ROOT_PASSWORD=secret
      PMA_PORT=8080
      

      将以下行添加到“/etc/hosts”文件中:

      127.0.0.1   localhost
      

      假设您也在使用 nginx,并且该配置位于“docker-compose.yml”中的其他位置,您可以使用以下命令构建和启动这些服务:

      docker-compose up -d mysql nginx db phpmyadmin
      

      然后在浏览器中导航到 localhost:8080 并使用用户名“root”和密码“mypass”登录(将服务器字段留空)。

      【讨论】:

        【解决方案4】:

        假设您将 MySQL 容器启动为:

        $ docker run --name databaseContainer -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql

        那么你应该按如下方式实际创建 phpmyadmin:

        $ docker run --name myadmin -d --link mysql:db -p 8080:8080 phpmyadmin/phpmyadmin

        实际上建议您包含一个网络。所以你会有:

        $ docker run --name databaseContainer --network myDockerNetwork -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql

        $ docker run --name myadmin -d --link mysql:db --network myDockerNetwork -p 8080:8080 phpmyadmin/phpmyadmin

        确保首先创建您的网络:

        $ docker network create myDockerNetwork

        【讨论】:

          【解决方案5】:
          docker run --name db -e MYSQL_ROOT_PASSWORD=mypass -d mysql:5.7
          
          docker run -p 80:80 --link db:mysql phpmyadmin/phpmyadmin
          

          尝试执行上面的命令,它会起作用,因为 phpmyadmin 可能在他们的实现中硬编码了 mysql 服务器容器名称为 db。

          如果你仍然想给你的数据库服务器一个唯一的名字,添加PMA_HOST环境变量:

          docker run --name myadmin -d --link mysqlserver:mysql -p 8080:80 -e PMA_HOST=mysqlserver phpmyadmin/phpmyadmin
          

          mysqlserver 是您的 mysql 数据库服务器的名称。

          【讨论】:

            【解决方案6】:

            phpmyadmin/phpmyadmin 的配置文件(/www/config.inc.php)默认说数据库服务器的主机名 if 'db' :

            $hosts = array('db');

            因此,如果您的数据库名称容器不是“db”,则应添加具有正确名称的环境变量 PMA_HOST=(或 PMA_HOSTS,如果是多数据库服务器)(在您的情况下为 databaseContainer)

            【讨论】:

            • 当我运行docker run --name myadmin -d --link mysql_db_server:db -p 8080:80 phpmyadmin/phpmyadmin 时它会工作,但由于某种原因,在没有环境变量的情况下不能使用 docker-compose。您对 env var 的建议应该在所有文档中。 Docker 文档掩盖了太多细节!
            猜你喜欢
            • 2019-12-17
            • 2023-03-26
            • 2011-10-30
            • 1970-01-01
            • 1970-01-01
            • 2020-02-13
            • 1970-01-01
            • 2017-08-12
            • 2011-03-14
            相关资源
            最近更新 更多