我有一个Java Spring Boot应用程序。 该应用程序将cassandra用作数据存储,并将kafka用作消息传递。 我正在本地使用cassandra和zookeeper和kafka的图像来运行它们。
我还为我的Web应用程序创建了DockerFile,并构建该文件以创建映像。
我的应用程序在运行时,连接到cassandra数据库。
当我运行应用程序(intelij)时,通过连接到cassandra(以docker运行)可以正常工作,但是当我为同一应用程序在本地运行docker image时,应用程序图像容器无法连接到在本地运行的cassandra,并且因此失败。
我需要做些什么,以便我可以运行该应用程序的docker容器并连接到cassandra。
答案 0 :(得分:0)
我不知道您在应用程序中使用的连接详细信息(主机:端口)的确切细节,但是这种情况下最常见的错误是使用localhost
。
localhost
与localhost不同。因此,在docker容器中启动应用程序时,必须为cassandra部署指定其他主机名。
默认情况下,Docker将使用容器ID作为容器主机名,因此您必须将localhost
替换为cassandra容器ID,或者使用--hostname
启动cassandra容器,以定义一个您想使用。
最后,一个更优雅的解决方案是使用docker compose文件,其中每个服务的主机名是服务名。这对于一起启动彼此“交谈”的多个服务非常有用。
您可以找到我向您介绍的有关容器here的主机名的所有内容。
还here,您可以找到有关docker compose的不错介绍。
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
在此示例中,每个服务的主机名是 web 和 redis 。您可以将其应用于撰写文件,并为cassandra和kafka使用相应的主机名。