从其他容器访问mysql容器

Isk*_*sky 10 mysql docker

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

$mysqli = new mysqli("172.17.0.2", "mattia", "prova", "prova");
Run Code Online (Sandbox Code Playgroud)

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

小智 20

--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
Run Code Online (Sandbox Code Playgroud)

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


sar*_*ara 16

您需要使用docker run命令中的--link标志或docker-compose中的链接功能将docker容器链接在一起.例如:

docker run -d -name app-container-name --link mysql-container-name app-image-name
Run Code Online (Sandbox Code Playgroud)

这样docker就会将mysql容器的IP地址添加到应用程序容器的/ etc/hosts文件中.有关完整文档,请参阅: MySQL Docker容器:了解基础知识

  • 链接现在是一个[遗留选项](https://docs.docker.com/compose/compose-file/compose-file-v2/#links),应该使用网络。 (2认同)