Tomcat 的 Spring 应用程序属性与 docker 容器链接
Tomcat's Spring app properties with docker container linking
我一直在玩 docker。
我有我的 mysql 容器
docker 运行 --name mymysql -d mysql/mysql-server:5.6
我的 tomcat 部署我的应用程序的容器
docker 运行 --link mymysql:mysql -d 我的 tomcat
在 tomcat 容器中我可以看到(因为 linking)
..
MYTOMCAT_PORT_8080_TCP_ADDR=172.17.0.55
..
and in the /etc/hosts
172.17.0.55 mysql
在我的 spring 应用程序中,我以这种方式管理属性
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:${env}/myapp.properties</value>
</list>
</property>
</bean>
where depending on the configuration (prop variable is set -Denv=qa in the JAVA_OPTS of tomcat)
在 qa/myapp.properties 我有例如 mysql link
databaseUrl=jdbc:mysql://mysql:3306/mydb
其中 'mysql' 是 mysql docker 图像的名称,与 tomcat 容器的 /etc/hosts 相同
我想知道我处理事情的方式是否被认为是好的做法?
是否有 easier/cleverer 处理属性的方法?我的 java 应用程序被强烈 link 编辑到我的 docker 图像的名称这一事实让我有点困扰。
我想在 tomcat 容器上有一种 运行 使用 ENV 变量 (MYTOMCAT_PORT_8080_TCP_ADDR) 构建最终 may.properties 的脚本/etc/hosts 值。这是更好的解决方案吗?
我刚刚自己解决了这个问题。为了不将您的 mysql 数据库容器紧密耦合到您可以使用另一个 JAVA_OPTS 或 CATALINA_OPTS 来传递您的 mysql url 然后在您的 databaseUrl 中使用.因此,对于您的示例,您可以这样做:
docker run --link mysql_container:mysql -e JAVA_OPTS="-Denv=qa -Dmysql_url=//mysql:3306"
然后在您的连接配置中:
databaseUrl=jdbc:mysql:${mysql_url}/mydb
如果其中有任何不合理的地方,请告诉我。我找到的许多例子都没有给我完整的答案,所以我可以理解你是否需要更多信息。
我一直在玩 docker。
我有我的 mysql 容器
docker 运行 --name mymysql -d mysql/mysql-server:5.6
我的 tomcat 部署我的应用程序的容器
docker 运行 --link mymysql:mysql -d 我的 tomcat
在 tomcat 容器中我可以看到(因为 linking)
..
MYTOMCAT_PORT_8080_TCP_ADDR=172.17.0.55
..
and in the /etc/hosts
172.17.0.55 mysql
在我的 spring 应用程序中,我以这种方式管理属性
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:${env}/myapp.properties</value>
</list>
</property>
</bean>
where depending on the configuration (prop variable is set -Denv=qa in the JAVA_OPTS of tomcat)
在 qa/myapp.properties 我有例如 mysql link
databaseUrl=jdbc:mysql://mysql:3306/mydb
其中 'mysql' 是 mysql docker 图像的名称,与 tomcat 容器的 /etc/hosts 相同
我想知道我处理事情的方式是否被认为是好的做法? 是否有 easier/cleverer 处理属性的方法?我的 java 应用程序被强烈 link 编辑到我的 docker 图像的名称这一事实让我有点困扰。
我想在 tomcat 容器上有一种 运行 使用 ENV 变量 (MYTOMCAT_PORT_8080_TCP_ADDR) 构建最终 may.properties 的脚本/etc/hosts 值。这是更好的解决方案吗?
我刚刚自己解决了这个问题。为了不将您的 mysql 数据库容器紧密耦合到您可以使用另一个 JAVA_OPTS 或 CATALINA_OPTS 来传递您的 mysql url 然后在您的 databaseUrl 中使用.因此,对于您的示例,您可以这样做:
docker run --link mysql_container:mysql -e JAVA_OPTS="-Denv=qa -Dmysql_url=//mysql:3306"
然后在您的连接配置中:
databaseUrl=jdbc:mysql:${mysql_url}/mydb
如果其中有任何不合理的地方,请告诉我。我找到的许多例子都没有给我完整的答案,所以我可以理解你是否需要更多信息。