我遇到过cassandra容器的情况。
我在不同的文件夹中有2个docker-compse.yaml文件。
文件夹1中的docker-compose.yaml
version: "3"
services:
cassandra-cluster-node-1:
image: cassandra:3.0
container_name: cassandra-cluster-node-1
hostname: cassandra-cluster-node-1
ports:
- '9142:9042'
- '7199:7199'
- '9160:9160'
文件夹2中的docker-compose.yaml
version: "3"
services:
cassandra-cluster-node-2:
image: cassandra:3.0
container_name: cassandra-cluster-node-2
hostname: cassandra-cluster-node-2
ports:
- '9242:9042'
- '7299:7199'
- '9260:9160'
我尝试在文件夹1上升cassandra,系统运行良好,之后我在文件夹2上升cassandra。但此时,文件夹1上的服务cassandra会自动终止。所以我不理解他们,你们有可能吗,有Docker经验可以帮助我解释这种情况吗?
运行cassandra_2后cassandra_1中的错误
cassandra-cluster-node-1 exited with code 137
谢谢,我会感激你的帮助。
答案 0 :(得分:3)
137内存不足错误。如果以默认设置启动,Cassandra会占用大量内存。默认情况下,它占系统内存的1/4。对于每个instans。您可以使用环境变量限制内存使用量(请参阅下面的示例)
Docker compose为其运行的每个目录创建一个网络。通过您的设置,两个节点将永远无法找到彼此。这是我测试的输出,你的文件放在两个目录中; cass1
和cass1
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
dbe9cafe0af3 bridge bridge local
70cf3d77a7fc cass1_default bridge local
41af3e02e247 cass2_default bridge local
21ac366b7a31 host host local
0787afb9aeeb none null local
您可以看到两个网络cass1_default和cass2_default。所以两个节点不会找到对方。
如果你想让他们找到对方,你必须将第一个作为种子给第二个,并且他们必须在同一个网络中(相同的docker-compose文件)
version: "3"
services:
cassandra-cluster-node-1:
image: cassandra:3.0
container_name: cassandra-cluster-node-1
hostname: cassandra-cluster-node-1
environment:
- "MAX_HEAP_SIZE=1G"
- "HEAP_NEWSIZE=256M"
ports:
- '9142:9042'
- '7199:7199'
- '9160:9160'
cassandra-cluster-node-2:
image: cassandra:3.0
container_name: cassandra-cluster-node-2
hostname: cassandra-cluster-node-2
environment:
- "MAX_HEAP_SIZE=1G"
- "HEAP_NEWSIZE=256M"
- "CASSANDRA_SEEDS=cassandra-cluster-node-1"
ports:
- '9242:9042'
- '7299:7199'
- '9260:9160'
depends_on:
- cassandra-cluster-node-1