无法从另一个容器访问 dockerized MySQL 实例

时间:2021-02-12 11:39:04

标签: docker

当我启动 MySQL 时:

docker run --rm -d -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -v /Docker/data/matos/mysql:/var/lib/mysql mysql:5.7

然后启动 PHPMyAdmin :

docker run --rm -d -e PMA_HOST=172.17.0.1 phpmyadmin/phpmyadmin:latest

PMA 无法连接到数据库服务器。 当我尝试使用 PMA_HOST=172.17.0.2(这是分配给 MySQL 容器的地址)时,它可以工作。 但是:

  • 当 MySQL 容器发布其 3306 端口时,我认为它应该可以在 172.17.0.1:3306 上访问。
  • 我不想使用 172.17.0.2 地址,因为 MySQL 容器可以在每次重启时分配另一个地址

我错了吗?

(我知道我可以使用 docker-compose 来处理这个问题,但更喜欢一个一个地管理我的容器)。

(我的 MySQL 容器可以通过 telnet 172.17.0.1 3306 从我的笔记本电脑成功 telnetable)。

(我的 Docker 版本:Docker 版本 20.10.3,构建 48d30b5)。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

创建一个新的 docker 网络并使用该网络启动两个容器

docker network create my-network

docker run --rm -d --network my-network -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -v /Docker/data/matos/mysql:/var/lib/mysql --name mysql mysql:5.7

docker run --rm -d --network my-network -e PMA_HOST=mysql phpmyadmin/phpmyadmin:latest

注意在命令中我给mysql容器取了一个名字'mysql'并用它作为phpmyadmin的地址

答案 1 :(得分:1)

刚刚发现问题。

我的 ufw 在我的笔记本电脑上处于活动状态,并且没有明确允许端口 3306。

我设法使用 172.17.0.1 在 PMA 容器和 MySQL 之间进行通信,方法是禁用 ufw 或添加规则以显式接受端口 3306。

感谢@kidustiliksew 的快速回复,以及您给我测试用户定义网络的机会。

答案 2 :(得分:0)

也许使用 docker-compose 是个好主意。 创建一个docker-compose.yml文件,在里面声明两个服务,一个是web,一个是db,然后就可以通过服务名(web, db)来引用了

ex: PMA_HOST=db