【发布时间】:2019-10-02 00:49:24
【问题描述】:
好吧,设置很简单,应该有两个容器:一个用于 mysql 数据库,另一个用于 Web 应用程序。
我如何运行容器, 第一个用于数据库,第二个用于应用程序:
docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=db -p 3306:3306 -d mysql
docker run -p 8081:8081 myrepo/myapp
应用程序尝试使用 localhost:3306 连接到数据库,但我发现问题是每个容器都有自己的 localhost。
我找到的一个解决方案是使用--net 为容器添加相同的网络,而 docker 命令恰好如下所示:
docker network create my-network
docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=db -p 3306:3306 -d
--net my-network mysql
docker run --net my-network -p 8081:8081 myrepo/myapp
尽管如此,Web 应用程序仍然无法连接到数据库。 我做错了什么?当它们都在容器中时,将应用程序连接到数据库的正确流程是什么?
【问题讨论】:
-
你需要告诉app容器连接到
my-network中DB容器的IP。localhost将不起作用。 -
@rdas 使用
docker inspect <container id> | grep "IPAddress"获取 IP,并将 localhost 替换为我在应用程序中获取的 IP,但应用程序仍然无法连接到数据库。