我正在尝试将PHPMyAdmin-Container连接到MySQL-Container以查看数据库。
我已经通过$ docker run --name databaseContainer -e MYSQL_ROOT_PASSWORD=my-secret-pw -d 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,它有效...
答案 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。