如何使用JDBC从具有Web服务的Docker容器连接到具有MySQL的另一个Docker容器?

时间:2019-01-12 12:57:54

标签: docker jdbc docker-compose

无法使用JDBC从另一个Docker容器连接到在Docker容器中运行的MySQL。我可以在docker外部连接到每个容器,因此我知道它们正在运行。但是使用JDBC的容器到容器不适用于我。

基于我的docker-compose文件,我目前已经尝试了JDBC的多种组合,包括(对于JDBC URL)localhost,0.0.0.0、127.0.0.1,内部和外部端口,container_name,db名称以及其他组合

我还尝试将环境子句添加到docker-compose文件中。

还尝试使用内部docker网络名称。

搜索StackOverflow并尝试了所有看起来可行的建议。

使用数据库容器名称的示例JDBC语法:

“ jdbc:mysql:// test-mysql-docker:3306 / ZipCodeLookup?useSSL = false&” +                         “” serverTimezone = America / New_York&user = root&password = thepass&autoReconnect = true“;

*.h

预期结果将是在第一个Docker容器“ app”中运行的服务的SQL邮政编码结果。

实际结果是错误,表明服务尝试了3次后仍无法联系数据库。

1 个答案:

答案 0 :(得分:0)

问题是我的WAR文件被缓存了,即使我关闭了docker,随后使用docker up进行的重建也使用了该缓存的war文件。

因此,在构建之间进行“ docker system prune -af”(可能是一种更好的方法),实际上使我可以尝试不同的构建。

解决方案:使用在docker-compose中定义的mysql容器名称。就我而言,这是正确的JDBC(来自上面的docker-compose):

    final String DATABASE_URL =
            "jdbc:mysql://test-mysql-docker:3306/ZipCodeLookup?useSSL=false&" +
                    "serverTimezone=America/New_York&user=root&password=thepass&autoReconnect=true";

希望这对其他人也有帮助。 :)

感谢所有人。