[Docker]:将 PHPMyAdmin 连接到 MySQL 不起作用

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/39054411/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-31 21:58:41  来源:igfitidea点击:

[Docker]: Connecting PHPMyAdmin to MySQL doesnt work

mysqldockerphpmyadmin

提问by Pascal

I'm trying to connect a PHPMyAdmin-Container to a MySQL-Container to view the databases.

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

I have started the MySQL container via $ docker run --name databaseContainer -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql

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

and the PHPMyAdmin-Container via $ docker run --name myadmin -d --link databaseContainer:mysql -p 8080:8080 phpmyadmin/phpmyadmin

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

When trying to login on PHPMyAdmin, I get: mysqli_real_connect(): php_network_getaddresses: getaddrinfo failed: Name does not resolve

尝试在 PHPMyAdmin 上登录时,我得到:mysqli_real_connect(): php_network_getaddresses: getaddrinfo failed: Name does not resolve

and

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

mysqli_real_connect(): (HY000/2002): php_network_getaddresses: getaddrinfo 失败: 名称无法解析

By the way, I have also started a wordpress container and also linked it to mysql, there it works...

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

回答by Eugen Mayer

Instead of starting them one by one, use docker-compose.

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

Create a docker-compose.yml file

创建一个 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"

Then start it using docker-compose upin the same folder your docker-compose.ymlfile is located. Access PHPmyadmin using the browser and use 'db' as the hostname of your database, since that is the name of the service in the docker-compose.ymlfile and therefore can be resolved using dockers internal DNS service to the actual ip of the docker-container. All the links are setup for you automatically.

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

That's much simpler - docker run overcomplicates things and is not practical for those things - never.

这要简单得多 - docker run 使事情过于复杂并且对这些事情不切实际 - 从不。

Hint: if docker-compose is not installed on your machine, install it using this official docs https://docs.docker.com/compose/install/(out of scope)

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

回答by JL M

The configuration file of phpmyadmin/phpmyadmin (/www/config.inc.php) say by default the host name of database server if 'db' :

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

$hosts = array('db');

$hosts = array('db');

So if your database name container is not 'db', you should add the environment variable PMA_HOST= (or PMA_HOSTS if multi db servers) with the right name (databaseContainer in your case)

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

回答by AKASH DUBEY

docker run --name db -e MYSQL_ROOT_PASSWORD=mypass -d mysql:5.7

docker run -p 80:80 --link db:mysql phpmyadmin/phpmyadmin

Try executing the above command it will work, as phpmyadmin may have hardcoded the in their implementation that the mysql server conatiner name to be db.

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

If you still want to give your db server a unique name, add PMA_HOSTenvironment variable:

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

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

mysqlserveris the name give to your mysql db server.

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

回答by mtebong

GIVEN you started the MySQL container as:

鉴于您以以下方式启动 MySQL 容器:

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

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

THEN you should actually create phpmyadmin as follows:

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

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

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

It is actually advisable that you include a network. So you would have:

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

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

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

AND

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

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

Make sure your network is created first:

确保首先创建您的网络:

$ docker network create myDockerNetwork

$ docker network 创建 myDockerNetwork

回答by Ivor

I've had the same error installing docker using laradock, then running docker-compose up. Out of the box, default config throws this error when you attempt to log into phpMyAdmin (using current images as of Oct 2018). The error was not present using docker run.

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

For docker-compose.yml (version 3), one cause is services running on different networks by default. For anyone else having this issue, here is a config that works for mysql and phpmyadmin.

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

Inside "docker-compose.yml" file, under "services":

在“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

Edit the ".env" file as follows:

编辑“.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

Add the following line to the "/etc/hosts" file:

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

127.0.0.1   localhost

Assuming you're also using nginx, and that config is elsewhere in your "docker-compose.yml", you can build and start these services with:

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

docker-compose up -d mysql nginx db phpmyadmin

Then navigate to localhost:8080 in your browser and login with username "root" and password "mypass" (leave server field blank).

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

回答by vivanov

In my case, I was using MySQL 8.0 and it turned out that mysql has introduced a new password identification which is not supported by phpmyadmin. See this answer.

就我而言,我使用的是 MySQL 8.0,结果发现 mysql 引入了 phpmyadmin 不支持的新密码标识。看到这个答案