从其他容器访问 mysql 容器
Posted
技术标签:
【中文标题】从其他容器访问 mysql 容器【英文标题】:Access to mysql container from other container 【发布时间】:2016-05-27 13:50:00 【问题描述】:我已经使用 mysql 设置了 docker 容器,它公开了 3306。 我已经指定了数据库用户、数据库密码并创建了一个测试数据库并将权限授予新用户。 在另一个容器中,我想访问这个数据库。 所以我用一个简单的 php 脚本设置了新容器,在这个数据库中创建新表。 我知道 mysql 容器的 ip 是 172.17.0.2 所以:
$mysqli = new mysqli("172.17.0.2", "mattia", "prova", "prova");
与使用 mysqli 相比,我创建了新表并且一切正常。 但我认为使用他的 IP 地址连接到容器并不好。 还有另一种指定数据库主机的方法吗?我尝试使用 mysql 容器的主机名,但它不起作用。
【问题讨论】:
【参考方案1】:--link
标志被视为旧功能,您应该使用用户定义的网络。
您可以在同一个网络上运行两个容器:
docker run -d --name php_container --network my_network my_php_image
docker run -d --name mysql_container --network my_network my_mysql_image
该网络上的每个容器都可以使用容器名称作为主机名相互通信。
【讨论】:
我已经创建了一个新网络 $ docker network create -d bridge mynetwork 并在这个网络上运行我的应用程序容器和 mysql 容器我尝试通过容器 IP 和端口将我的节点应用程序连接到 mysql 容器,但是它的即使我的数据库在工作台中运行良好,也无法连接 如果你有几个容器,每个容器都连接到自己的mysql容器怎么办? F.I: 竹代理1 -->mysql1 ,竹代理2 -->mysql2 @DimiDak 只是将它们放在两个不同的网络上。一个网络上的一对(客户端+db),另一个网络上的第二对。您可以为不同的项目创建多个网络。 工作,刚刚在 2021 年用 mysql 5.7 和 laravel 7 测试过 我成功迁移laravel数据库,更改DB_HOST=mysql_container【参考方案2】:您需要将 docker 容器与 docker run 命令中的 --link 标志或使用 docker-compose 中的链接功能链接在一起。例如:
docker run -d -name app-container-name --link mysql-container-name app-image-name
通过这种方式,docker 会将 mysql 容器的 IP 地址添加到应用程序容器的 /etc/hosts 文件中。 有关完整的文档,请参阅: MySQL Docker Containers: Understanding the basics
【讨论】:
链接现在是legacy option,应该改用网络。【参考方案3】:在您的 docker-compose.yml 文件中,为您的网络服务器服务添加一个链接属性: https://docs.docker.com/compose/networking/#links
然后在您的查询字符串中,主机参数的值是您的数据库服务名称:
$mysqli = new mysqli("database", "mattia", "prova", "prova");
【讨论】:
以上是关于从其他容器访问 mysql 容器的主要内容,如果未能解决你的问题,请参考以下文章
Docker - 一个命令部署完MySQL容器,从另外一个容器中无法访问?解决方案
Docker - 一个命令部署完MySQL容器,从另外一个容器中无法访问?解决方案
Docker - 一个命令部署完MySQL容器,从另外一个容器中无法访问?解决方案
Docker - 一个命令部署完MySQL容器,从另外一个容器中无法访问?解决方案
从golang mysql连接到mysql容器时,用户'root'@'localhost'的访问被拒绝(使用密码:YES)