通过docker-compose

时间:2018-03-09 07:55:23

标签: docker cassandra docker-compose

我希望能够通过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个实例,但它运行正常。

2 个答案:

答案 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服务,并将每个服务映射到一个单独的卷。