背景

当时正在做一个关于缠中说禅-论语的wordpress项目,需要在数据库中插入文章数据。 通过wp-env搭建本地开发环境,wp-env会启动wordpress, mysql的容器,但是没有Phpmyadmin,如果想用Phpmyadmin,就需要手动启动一个Phpmyadmin的container。

问题

通过以下命令启动Phpmyadmin的container

docker run -d --name wp-env-phpmyadmin -p 8086:80 --env PMA_HOST=localhost --env PMA_PORT=56523 phpmyadmin/phpmyadmin

出现一个问题 mysqli::real_connect(): (HY000/2002): Connection refused

Phpmyadmin与mysql服务器连接不上,只能是mysql服务器地址错了。

端口是通过wp-env启动的container拿到的,不可能错,那只能是PMA_HOST错了。

mysql的container就是在本机启动的,应该是localhost没错啊。

解决

这一篇stackoverflow帖子提到了一个解决方案是将PMA_HOST环境变量设为 host.docker.internal.

恍然大悟,Phpmyadmin的container的localhost并不是宿主机的localhost,而host.docker.internal 就可用于在容器内访问宿主机。