[Docker]:无法将PHPMyAdmin连接到MySQL
我正在尝试将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
$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