[Docker]:无法将PHPMyAdmin连接到MySQL

[Docker]:无法将PHPMyAdmin连接到MySQL,mysql,docker,phpmyadmin,Mysql,Docker,Phpmyadmin,我正在尝试将PHPMyAdmin容器连接到MySQL容器以查看数据库 我已经通过$docker run--name databaseContainer-e MySQL\u ROOT\u PASSWORD=my secret pw-d MySQL启动了MySQL容器 通过$docker run--name myadmin-d--link databaseContainer:mysql-p8080:8080 PHPMyAdmin/PHPMyAdmin 尝试登录PHPMyAdmin时,我得到: mys

我正在尝试将PHPMyAdmin容器连接到MySQL容器以查看数据库

我已经通过
$docker run--name databaseContainer-e MySQL\u ROOT\u PASSWORD=my secret pw-d MySQL启动了MySQL容器

通过
$docker run--name myadmin-d--link databaseContainer:mysql-p8080:8080 PHPMyAdmin/PHPMyAdmin

尝试登录PHPMyAdmin时,我得到: mysqli\u real\u connect():php\u network\u getaddresses:getaddrinfo失败:名称未解析

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


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

使用
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
文件中服务的名称,因此可以使用docker内部DNS服务解析为docker容器的实际ip。所有链接都是为您自动设置的

这要简单得多——docker run使事情过于复杂,对这些事情不实用——永远不会


提示:如果您的计算机上未安装docker compose,请使用此官方文档安装它(超出范围)

phpmyadmin/phpmyadmin(/www/config.inc.php)的配置文件,默认情况下,如果“db”,请说出数据库服务器的主机名:

$hosts=array('db')

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

docker run--name db-e MYSQL\u ROOT\u PASSWORD=mypass-d MYSQL:5.7
docker运行-p80:80——链接数据库:mysql phpmyadmin/phpmyadmin
请尝试执行上面的命令,因为phpmyadmin可能在其实现中硬编码了mysql服务器conatiner name为db

如果仍要为db服务器指定唯一的名称,请添加
PMA\u HOST
环境变量:

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

mysqlserver
是您的mysql db服务器的名称。

假设您以以下方式启动mysql容器:

$docker run--name databaseContainer-e MYSQL\u ROOT\u PASSWORD=my secret pw-d MYSQL

然后您应该实际创建phpmyadmin,如下所示:

### 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
$docker run--name myadmin-d--link mysql:db-p8080:8080 phpmyadmin/phpmyadmin

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

$docker run--name databaseContainer--network myDockerNetwork-e MYSQL\u ROOT\u PASSWORD=my secret pw-d MYSQL

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

确保先创建网络:

$docker网络创建MyDocker网络


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

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

在“docker compose.yml”文件中的“服务”下:

按如下方式编辑“.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”文件:

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

docker-compose up -d mysql nginx db phpmyadmin

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

在我的例子中,我使用的是MySQL 8.0,结果发现MySQL引入了一个新的密码标识,这是phpmyadmin不支持的。

谢谢,它很管用!我还发现,输入环境变量(DB Host、User、PW)是一个选项,只是链接不起作用……您也可以在docker compose中输入所有这些环境变量,但我想这很清楚,我不知道您可以使用“DB”作为主机名。谢谢你!您应该在MYSQL\u ROOT\u密码后添加一个空格:当我运行
docker run时——命名为myadmin-d——link MYSQL\u db\u server:db-p 8080:80 phpmyadmin/phpmyadmin
它可以工作,但由于某种原因,没有env var,docker compose无法工作。您对env var的建议应该出现在所有文档中。Docker文档掩盖了太多细节!
docker-compose up -d mysql nginx db phpmyadmin