Golang与Cassandra数据库使用docker compose:无法连接(gocql)



我正在尝试设置一个cassandra数据库,并使用golang应用程序连接到它。

这是我的docker-compose


version: "3.6"
services:
cassandra:
image: cassandra:4.0
ports:
- 9042:9042
volumes:
- ~/apps/cassandra:/var/lib/cassandra
environment:
- CASSANDRA_CLUSTER_NAME=mycluster
myapp:
...
ports:
- 4242:4242
- 4243:4243
depends_on:
- cassandra
...
networks:
default:
driver: bridge

我使用启动Cassandra

docker-compose up cassandra

然后我等着它准备好。

然后我尝试使用连接到本地的Cassandra

> cqlsh
Connected to mycluster at 127.0.0.1:9042

然后我尝试使用gocql在我的go应用程序中连接到它(已固定(

cluster := gocql.NewCluster("127.0.0.1")
session, err := cluster.CreateSession()

(也尝试添加元素作为ConsistencyProtoVersion=4等,结果相同(

上面写着:

Cannot connect to db: gocql: unable to create session: unable to discover protocol version: dial tcp 127.0.0.1:9042: connect: connection refused

是的。知道为什么它不能连接吗?

谢谢!

每个容器都有自己的本地主机(127.0.0.1(地址-您需要连接到机器的IP地址(如果使用bridge(,或者最好使用名称(cassandra(连接

如果两个容器都使用桥接网络,则需要在两个容器中指定网络名称,并且在应用程序容器中,主机将是cassandra(docker(容器。

services:
cassandra:
image: cassandra:4.0
container_name: cassandra

ports:
- 9042:9042
volumes:
- ~/apps/cassandra:/var/lib/cassandra
networks:
- default
environment:
- CASSANDRA_CLUSTER_NAME=mycluster
myapp:
...
ports:
- 4242:4242
- 4243:4243
depends_on:
- cassandra
networks:
- default
environment:
- HOSTS=cassandra
...
networks:
default:
driver: bridge

最新更新