一尘不染

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

docker

我试图在两个单独的Docker容器上将我的Scala-Akka应用程序与MySQL数据库一起使用。我发现Docker允许开发人员使用名为–
link的标志将其应用程序链接到其数据库。在我用来创建映像的Dockerfile中,向其中添加了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容器中的数据库。有人知道怎么了吗?


阅读 289

收藏
2020-06-17

共1个答案

一尘不染

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"
2020-06-17