我已经设置了具有暴露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容器的主机名,但它不起作用。
答案 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");