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

时间:2016-08-20 12:56:41

标签: mysql docker phpmyadmin

我正在尝试将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:名称无法解析

顺便说一句,我还启动了一个wordpress容器并将它链接到mysql,它有效...

6 个答案:

答案 0 :(得分:30)

不要逐个启动它们,而是使用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 up文件所在的同一文件夹中使用docker-compose.yml启动它。 使用浏览器访问PHPmyadmin并使用' db'作为数据库的主机名,因为这是docker-compose.yml文件中服务的名称,因此可以使用docker内部DNS服务解析docker-container的实际ip。所有链接都会自动为您设置。

这简单得多 - docker运行过于复杂,对那些东西不实用 - 从来没有。

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

答案 1 :(得分:9)

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

  

$ hosts = array(' db');

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

答案 2 :(得分:2)

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服务器的conatiner名称为db。

如果您仍想为数据库服务器指定唯一名称,请添加PMA_HOST环境变量:

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

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

答案 3 :(得分:1)

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

  

$ docker run --name databaseContainer -e   MYSQL_ROOT_PASSWORD =我的秘密-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 =我的秘密-pw -d mysql

AND

  

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

确保首先创建您的网络:

  

$ docker network创建myDockerNetwork

答案 4 :(得分:0)

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

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

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

### 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”登录(将服务器字段保留为空白)。

答案 5 :(得分:0)

就我而言,我使用的是MySQL 8.0,事实证明mysql引入了新的密码标识,phpmyadmin不支持该标识。 参见this answer