Docker – 将Apache Tomcat Web服务器连接到MySQL服务器

我试图将运行在Apache Tomcat容器中的Web服务器连接到运行另一个容器的MySQL数据库。 为了做到这一点,我正在使用Docker的链接机制。

docker run -it --name ${CONTAINER_NAME} --link db:db -p 8080:8080 -d tomcat 

运行容器后,我可以看到容器被链接,环境variables正确显示。

为了将运行在Tomcat容器中的Web应用程序连接到数据库,我使用了以下configuration文件:

 <Context> <Resource name="jdbc/MYDB" type="javax.sql.DataSource" auth="Container" username="user" password="password" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://${DB_PORT_3306_TCP_ADDR}:${DB_PORT_3306_TCP_PORT}/epcis?autoReconnect=true"> </Resource> </Context> 

现在的问题是我无法build立到数据库的连接,因为Docker公开的环境variables在Tomcat环境中无法识别。

有一种方法可以让Docker公开的这些环境variables对Apache Tomcat环境可见吗?

你可以使用数据库的dns声明和硬编码的参考? 我认为/ etc / hosts文件更新与数据库,它的IP地址,当你 – 链接。 所以你可以:

 <Context> <Resource name="jdbc/MYDB" type="javax.sql.DataSource" auth="Container" username="user" password="password" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql:db:3306/epcis?autoReconnect=true"> </Resource> </Context> 

我使用的另一种技术是skydns和注册器,然后在DNS srvlogging中获得IP和端口。

我不记得Tomcat,但应该可以访问variables。 你确定Tomcat在使用之前评估URL定义吗?

实际上,这些环境variables并没有暴露在tomcat正在运行的angular度。 解决scheme是基于tomcat创build自己的Dockerfile(即“FROM tomcat”),并创build自己的启动脚本,将相关的env vars传递到/etc/tomcat/tomcat.conf中:

 echo DB_PORT_3306_TCP_ADDR=${DB_PORT_3306_TCP_ADDR} >> /etc/tomcat/tomcat.conf 

对于完全正常工作的tomcat6 / postgres示例,请使用此启动脚本查看此Dockerfile