我希望能够通过docker运行3个Cassandra实例,并在主机上映射卷。
我尝试通过运行 docker-compose up --scale cassandra = 3 来通过此docker-compose.yml使用它但它没有正确启动它们并显示错误,因为我正在映射一个卷对所有情况。
version: "2"
services:
cassandra:
image: cassandra
volumes:
- /opt/se/docker-volumes/cassandra:/var/lib/cassandra
是否可以在docker-compose.yml文件中为多个实例映射多个卷?
我尝试在没有定义卷的情况下运行3个实例,但它运行正常。
答案 0 :(得分:1)
你有没有理由不想这样做?
version: "2"
services:
cassandra1:
image: cassandra
volumes:
- /volume1:/var/lib/cassandra
cassandra2:
image: cassandra
volumes:
- /volume2:/var/lib/cassandra
cassandra3:
image: cassandra
volumes:
- /volume3:/var/lib/cassandra
答案 1 :(得分:1)
问题是由于当不同的实例启动时,它们正在将数据写入同一卷。这导致了许多竞争条件,并且正在破坏每个实例的/var/lib/cassandra
目录。
要解决此问题,您需要将每个实例映射到单独的卷。您可以通过删除compose文件中的卷映射来实现这一点,并将其留给docker来创建数据卷,因为/var/lib/cassandra
在cassandra的Dockerfile中声明为VOLUME
。
或者,您可以手动声明三个cassandra服务,并将每个服务映射到一个单独的卷。