Я пытаюсь создать настройку docker compose, которая будет ожидать запуска контейнера Cassandra, прежде чем запускать контейнер JanusGraph, который требует запуска Cassandra перед запуском.
Кажется, что команда nodetool является стандартным способом проверки состояния Cassandra.Вот что я запускаю nodetool сначала в контейнере cassandra:
docker exec -it ns-orchestration_data_storage_1 nodetool status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns (effective) Host ID Rack
UN 172.31.0.2 235.53 KiB 256 100.0% eea17329-6274-45a7-a9fb-a749588b733a rack1
Первый «UN» в последней строке стандартного вывода означает «Up / Normal», который я намереваюсь использовать в моем wait-for-cassandra-and-elasticsearch.sh скрипт.Но теперь, когда я пытаюсь запустить его на контейнере janusgraph (удаленно), я получаю следующее:
docker exec -it ns-orchestration_data_janusgraph_1 bin/nodetool -h 172.31.0.2 -u cassandra -pw <my-password-here> status
docker exec -it ns-orchestration_data_janusgraph_1 bin/nodetool -h
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/app/janusgraph-0.3.0-hadoop2/lib/slf4j-log4j12-1.7.12.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/app/janusgraph-0.3.0-hadoop2/lib/logback-classic-1.1.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
nodetool: Failed to connect to '172.31.0.2:7199' - ConnectException: 'Connection refused (Connection refused)'.
Я открыл все порты Cassandra, как вы можете видеть в файле docker-compose ниже.
Я также видел этот пост , который, я не уверен, связан.Я пытался следовать инструкциям, но я все еще получаю ту же ошибку.
Буду признателен за любые предложения.
Файл: docker-compose.yml
version: '3'
services:
data_janusgraph:
build:
context: ../ns-compute-store/db-janusgraph
dockerfile: Dockerfile.janusgraph
ports:
- "8182:8182"
depends_on:
- data_storage
- data_index
networks:
- ns-net
data_storage:
build:
context: ../ns-compute-store/db-janusgraph
dockerfile: Dockerfile.cassandra
environment:
- CASSANDRA_START_RPC=true
ports:
- "9160:9160"
- "9042:9042"
- "7199:7199"
- "7001:7001"
- "7000:7000"
volumes:
- data-volume:/var/lib/cassandra
networks:
- ns-net
data_index:
image: elasticsearch:5.6
ports:
- "9200:9200"
- "9300:9300"
networks:
- ns-net
networks:
ns-net:
driver: bridge
volumes:
data-volume:
Файл: Dockerfile.cassandra
FROM cassandra:3.11
COPY conf/jmxremote.password /etc/cassandra/jmxremote.password
RUN chown cassandra:cassandra /etc/cassandra/jmxremote.password
RUN chmod 400 /etc/cassandra/jmxremote.password
COPY conf/jmxremote.access /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/management/jmxremote.access
RUN chown cassandra:cassandra /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/management/jmxremote.access
RUN chmod 400 /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/management/jmxremote.access
COPY conf/cassandra.yaml /etc/cassandra/cassandra.yaml
Файл:Dockerfile.janusgraph
FROM openjdk:8-jre-alpine
RUN mkdir /app
WORKDIR /app
RUN apk update \
&& apk upgrade \
&& apk --no-cache add unzip
RUN wget https://github.com/JanusGraph/janusgraph/releases/download/v0.3.0/janusgraph-0.3.0-hadoop2.zip
RUN unzip janusgraph-0.3.0-hadoop2.zip
RUN apk --no-cache add bash coreutils nmap
RUN apk del unzip
ENV JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=data_storage"
WORKDIR /app/janusgraph-0.3.0-hadoop2
COPY wait-for-cassandra-and-elasticsearch.sh ./
COPY conf/janusgraph-cql-es.properties ./
CMD ["./wait-for-cassandra-and-elasticsearch.sh", "data_storage:9160", "data_index:9200", "./bin/gremlin-server.sh", "./conf/gremlin-server/gremlin-server-berkeleyje.yaml"]
См. Полный код в репозитории Github: https://github.com/nvizo/janusgraph-cluster-example