Mysql docker.io-应用程序和;数据库容器

Mysql docker.io-应用程序和;数据库容器,mysql,scala,docker,Mysql,Scala,Docker,我试图在两个单独的Docker容器上使用Scala Akka应用程序和MySQL数据库。我发现Docker允许开发人员使用名为--link的标志将他们的应用程序链接到他们的数据库。在我用来创建图像的DockerFile中,我添加了EXPOSE 33068080 这就是我运行容器的方式: docker run -d -p 3306:3306 --name mysql centos6mysql docker run -d -p 8080:8080 --name scalaapp --link mys

我试图在两个单独的Docker容器上使用Scala Akka应用程序和MySQL数据库。我发现Docker允许开发人员使用名为--link的标志将他们的应用程序链接到他们的数据库。在我用来创建图像的DockerFile中,我添加了EXPOSE 33068080

这就是我运行容器的方式:

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中的链接允许在容器之间建立网络连接。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应用程序容器以连接到DB容器。但是,必须手动配置应用程序容器才能执行此操作。Docker不会自动为您建立连接

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

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

你可能想更明确地说明你所说的>是什么意思。应用程序容器似乎没有使用MySQL容器中的数据库。我创建了一个restcore脚本,启动了我的scala akka应用程序。我的应用程序容器基本上会在我运行脚本时启动它。我的脚本允许我将一个8080端口绑定到容器。在运行了app和db容器之后,我转到浏览器并输入http://:8080/v1//1。期望值:它将返回ID为1的DB记录。事实:它只是说内部服务器错误,我已经用${DB_PORT_3306; u TCP_ADDR}:${DB_PORT_3306; u TCP_PORT}/mydb在我的MySQL连接器jar文件中进行了相应的编辑,该文件在restcore脚本文件中使用。我使用环境变量-e“DB\u PORT\u 3306\u TCP\u ADDR=“-e”DB\u PORT\u 3306\u TCP\u PORT=3306”运行应用程序容器。我不知道为什么Docker链接不自动设置我的环境变量。之后,我用8080端口在浏览器上查看结果,结果仍然没有显示我想要的数据库记录……我发现,即使使用了我的应用程序和db容器之间的链接,它甚至没有设置我的环境变量。我已经在我的MySQL Dockerfile上公开了3306,不过…我已经解决了这个问题。它现在工作了,可以看到数据库记录。我所做的是执行到我的应用程序容器中,并使用env检查环境。它显示了MySQL环境变量!出于某种原因,检查容器并没有列出变量,而是进入容器并从中进行检查。谢谢你的帮助!:)