Mar*_*mes 5 java mysql tomcat jndi docker
我试图将在 Apache Tomcat 容器中运行的 Web 服务器连接到运行另一个容器的 MySQL 数据库。为了做到这一点,我使用了 Docker 的链接机制。
docker run -it --name ${CONTAINER_NAME} --link db:db -p 8080:8080 -d tomcat
运行容器后,我可以看到容器已链接并且环境变量已正确公开。
为了将在 Tomcat 容器中运行的 Web 应用程序连接到数据库,我使用了以下配置文件:
<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>
现在的问题是我无法建立到数据库的连接,因为在Tomcat环境中无法识别Docker暴露的环境变量。
有没有办法让 Docker 暴露的这些环境变量对 Apache Tomcat 环境可见?
您可以使用 db 的 dns 声明并对引用进行硬编码吗?我认为 /etc/hosts 文件已使用 db 进行更新,并且当您 --link 它时它是 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 srv 记录中获取 IP 和端口。
我不记得 Tomcat,但它应该可以访问变量。您确定 Tomcat 在使用 url 定义之前对其进行评估吗?
| 归档时间: | 
 | 
| 查看次数: | 8626 次 | 
| 最近记录: |