docker.io - 应用程序和放大器之间的Docker链接数据库容器

时间:2015-01-21 06:52:43

标签: mysql scala docker

我正在尝试将我的MySQL数据库中的Scala-Akka应用程序用于两个独立的Docker容器。我发现Docker允许开发人员使用名为--link的标志将他们的应用程序链接到他们的数据库。在我用来创建图像的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容器中的数据库。谁知道什么是错的?

1 个答案:

答案 0 :(得分:6)

Docker中的链接允许在容器之间建立网络连接。 Docker将为链接容器定义环境变量,以获取URL,IP,端口和协议。这些名称将基于容器的名称。例如:

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

您可以使用这些环境变量来设置您的Akka应用容器以连接到您的数据库容器。但是,您必须手动配置应用程序容器才能执行此操作。 Docker不会自动为您建立连接。

因此,在您的应用中的某个位置,您需要将这些值传递给您的启动脚本,这可能是这样的:

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