Проблема соединения между контейнерами (я полагаю ...) - PullRequest
1 голос
/ 17 июня 2019

я использую docker-compose для запуска 3-х контейнеров 1-мое веб-приложение 2-Postgres 3-Cassandra

Как только я использую: docker-compose up

Мое веб-приложение запускает это исключение: com.datastax.driver.core.exceptions.NoHostAvailableException: все хосты попытка запроса не удалась (попытка: cassandra / 172.17.0.3: 9042

Как только все контейнеры запущены, я могу войти в мое веб-приложение и попытаться пропинговать контейнер cassandras, прежде чем он умрет (контейнер веб-приложения), и все пакеты будут успешно возвращены, поэтому я полагаю, что между ними действительно есть соединение.

Самое странное, что однажды я получил это исключение: .InvalidQueryException: пространство ключей 'myKeyspace' не существует

Это означает, что соединение было установлено, но это было до того, как я добавил персистентность и создал упомянутую схему, но я ничего не изменил в моем compose.yml, чтобы получить этот новый результат

Вот мой докер-compose.yml:

version: '3.1' 

services:


cassandra:
    container_name: "cassandra"
    image: cassandra
    ports:
        - 9042:9042


    volumes:
      - /home/cassandra:/var/lib/cassandra


postgresql:

    container_name: "postgresql"
    image: postgres:11.1-alpine
    restart: always
    environment:
        POSTGRES_DB: mywebapp
        POSTGRES_USER: postgres
        POSTGRES_PASSWORD: postgres
    volumes:
       #- ./startup.sql:/docker-entrypoint-initdb.d/startup.sql 
       - postgresdata:/var/lib/postgresql/data

    ports:
        - 5432:5432



mywebapp:
    container_name: "mywebapp"
    image: openjdk:10-jre-slim
    hostname: mywebapp
    volumes:
        - ./lib:/home/lib
        - ./mywebapp-1.0.1-SNAPSHOT-exec.jar:/home/mywebapp-1.0.1-SNAPSHOT-exec.jar


    entrypoint:     
        - java
        - -jar
        - -Djava.library.path=/home/lib
        - /home/mywebapp-1.0.1-SNAPSHOT-exec.jar

    environment:
        - LD_LIBRARY_PATH=/home/lib
        - spring.datasource.url=jdbc:postgresql://postgresql:5432/mywebapp
        - spring.cassandra.contactpoints=cassandra
        - spring.cassandra.port=9042
        - spring.cassandra.keyspace=mywebapp
        #- spring.datasource.username=postgres
        #- spring.datasource.password=postgres
        #- spring.jpa.hibernate.ddlAuto=update+



    ports:
        - 8443:8443
        - 8080:8080
    depends_on:
        - cassandra

Объемы: postgresdata:

Спасибо всем заранее

1 Ответ

1 голос
/ 17 июня 2019

Я предполагаю, что ваше веб-приложение требует, чтобы служба cassandra работала при запуске. Вы должны добавить depends_on запись в службу веб-приложений, чтобы docker запускал ее только при запуске cassandra

И запись links не обязательна, так как docker автоматически будет использовать имена служб в качестве имен хостов в сети, созданной для этого проекта docker-compose. То же самое касается network_type: bridge - это тип сети по умолчанию, так что вы можете опустить это в вашем случае.

...