docker.io – Docker连接应用程序和数据库容器

我试图用我的Scala-Akka应用程序和两个独立的Docker容器上的MySQL数据库。 我发现Docker允许开发人员用名为–link的标志将他们的应用程序连接到他们的数据库。 在我用来创build图像的Dockerfiles中,我添加了EXPOSE 3306 8080。

这就是我如何运行容器:

docker run -d -p 3306:3306 --name mysql centos6mysql docker run -d -p 8080:8080 --name scalaapp --link mysql:db centos6scala 

在运行容器后,我使用docker ps,我可以看到活动的容器。 但是,应用程序容器似乎没有使用MySQL容器中的数据库。 任何人都知道什么是错的?

Docker中的链接允许在容器之间build立networking连接。 Docker会为你的链接容器定义URL,IP,端口和协议的环境variables。 这些名称将基于您的容器名称。 例如:

 DB_NAME=/web2/db DB_PORT=tcp://172.17.0.5:5432 DB_PORT_5432_TCP=tcp://172.17.0.5:5432 DB_PORT_5432_TCP_PROTO=tcp DB_PORT_5432_TCP_PORT=5432 DB_PORT_5432_TCP_ADDR=172.17.0.5 

您可以使用这些环境variables来设置您的Akka应用程序容器以连接到您的数据库容器。 但是,您必须手动configuration应用程序容器才能这样做。 Docker不会自动为你build立连接。

因此,在您的应用程序的某个地方,您需要将这些值传递给启动脚本,如下所示:

 ./restcore --Ddb.default.db="jdbc:mysql//${DB_PORT_3306_TCP_ADDR}:${DB_PORT_3306_TCP_PORT"