docker.io - Docker 应用程序和数据库容器之间的链接
docker.io - Docker linking between application & database containers
我正在尝试在两个单独的 Docker 容器上将我的 Scala-Akka 应用程序与我的 MySQL 数据库一起使用。我发现 Docker 允许开发人员使用名为 --link 的标志 link 他们的应用程序到他们的数据库。在我用来创建图像的 Docker 文件中,我添加了 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 中的链接允许在容器之间建立网络连接。 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"
我正在尝试在两个单独的 Docker 容器上将我的 Scala-Akka 应用程序与我的 MySQL 数据库一起使用。我发现 Docker 允许开发人员使用名为 --link 的标志 link 他们的应用程序到他们的数据库。在我用来创建图像的 Docker 文件中,我添加了 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 中的链接允许在容器之间建立网络连接。 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"