我有一个javaspring启动应用程序。这个应用程序使用cassandra作为数据存储,kafka作为消息传递。我使用Cassandra和zookeeper和Kafka本地运行它们的图像。
我还为我的web应用程序创建了dockerfile,并构建了一个文件来创建一个图像。
我的应用程序运行时,连接到Cassandra数据库。
当我运行应用程序(intelij)时,它通过连接到cassandra(以docker的身份运行)工作正常,但是当我在本地为同一个应用程序运行docker image时,app image容器无法连接到在本地运行的cassandra,因此失败。
我需要做什么,以便我可以运行应用程序的docker容器,还可以连接到cassandra。
1条答案
按热度按时间kokeuurv1#
我不知道你的连接细节(host:port)但在这种情况下最常见的错误是
localhost
.localhost
当您在docker容器外部启动应用程序时,docker容器中的应用程序与localhost不同。因此,在docker容器中启动应用程序时,必须为cassandra部署指定不同的主机名。默认情况下,docker将使用容器id作为容器主机名,因此您必须替换
localhost
使用您的cassandra容器id或者使用--hostname
以便定义要使用的主机名。最后,一个更优雅的解决方案是使用docker compose文件,其中每个服务的主机名是服务名。这对于启动多个相互“交谈”的服务非常有帮助。
你可以在这里找到我向你解释的关于集装箱主机名的一切。
在这里你也可以找到一个很好的介绍到docker撰写。
在这个例子中,每个服务的主机名是web和redis。您可以将其应用于您的compose文件,并为cassandra和kafka使用相应的主机名。