2017-10-20 16 views
1

J'ai une situation avec un conteneur Cassandra.Impossible de démarrer 2 conteneurs Cassandra sur mac

J'ai 2 fichiers docker-compse.yaml dans différents dossiers.

docker-compose.yaml dans le dossier 1

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' 

docker-compose.yaml dans le dossier 2

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' 

J'ai essayé jusqu'à cassandra sur le dossier 1, le système fonctionne bien, après J'ai cassandra sur le dossier 2. Mais à ce moment, le service cassandra sur le dossier 1 est tué automatiquement. Donc, je n'ai pas compris avec eux, pourriez-vous s'il vous plaît les gars, qui ont des expériences avec Docker peuvent m'aider à expliquer cette situation?

L'erreur dans cassandra_1 après avoir exécuté cassandra_2

cassandra-cluster-node-1 exited with code 137 

Merci, je vais apprécier votre aide.

Répondre

3

137 est une erreur de mémoire insuffisante. Cassandra utilise beaucoup de mémoire si elle a démarré avec les paramètres par défaut. Par défaut, il prend 1/4 de la mémoire du système. Pour chaque instans. Vous pouvez limiter l'utilisation de la mémoire en utilisant des variables d'environnement (voir mon exemple plus bas)

Docker compose crée un réseau pour chaque répertoire sous lequel il s'exécute. Avec votre configuration, les deux nœuds ne pourront jamais se trouver. C'est la sortie de mon test, vos fichiers sont placés dans deux répertoires; cass1 et 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 

Vous pouvez voir les deux réseaux cass1_default et cass2_default. Ainsi, les deux nœuds ne se trouveront pas.

Si vous voulez qu'ils trouver quelqu'un d'autre vous devez donner le premier comme une graine à deuxième, et ils doivent être dans le même réseau (même fichier 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