从其他容器访问mysql容器

时间:2016-02-16 10:25:28

标签: mysql docker

我已经设置了具有暴露3306的mysql的docker容器。 我已经指定了数据库用户,数据库密码并创建了测试数据库,并为新用户授予了权限 在另一个容器中,我想访问此数据库 所以我用一个简单的php脚本设置新容器,在这个db中创建新表 我知道mysql容器的ip是172.17.0.2所以:

$mysqli = new mysqli("172.17.0.2", "mattia", "prova", "prova");

比使用mysqli我创建新表并且一切正常 但我认为使用他的IP地址连接容器并不好 还有另一种指定db主机的方法吗?我尝试使用mysql容器的主机名,但它不起作用。

3 个答案:

答案 0 :(得分:13)

您需要将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

答案 1 :(得分:10)

--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

该网络上的每个容器都可以使用容器名称作为主机名相互通信。

答案 2 :(得分:1)

在您的docker-compose.yml文件中,将链接属性添加到您的Web服务器服务: https://docs.docker.com/compose/networking/#links

然后在您的查询字符串中,host参数的值是您的数据库服务名称:

$mysqli = new mysqli("database", "mattia", "prova", "prova");