Как исправить локальный вызов dynamodb с помощью docker-compose

#docker-compose #amazon-dynamodb

#docker-compose #amazon-dynamodb

Вопрос:

Я запускаю приложение springboot и dynamodb local в контейнерах docker через docker-compose.

Оба контейнера успешно работают.

Когда я использую имя контейнера для значения AMAZON_AWS_DYNAMODB_ENDPOINT, я получаю следующую ошибку:

 [https-jsse-nio-8443-exec-6] [2019-04-15 08:03:42,239] INFO   com.amazonaws.protocol.json.JsonContent [] - Unable to parse HTTP response content
com.fasterxml.jackson.core.JsonParseException: Unexpected character ('<' (code 60)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
at [Source: (byte[])"<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="http://aws.amazon.com/dynamodb/">here</a>.</p>
</body></html>
 

Далее я получаю следующую ошибку:

 com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException: null (Service: AmazonDynamoDBv2; Status Code: 301; Error Code: null; Request ID: null)
 

Если я заменю значение AMAZON_AWS_DYNAMODB_ENDPOINT на IP-адрес моего компьютера с Windows (запуск контейнеров), он успешно работает.

Любые предложения о том, как заставить имя контейнера работать?

Вот мой docker-compose:

 version: '3'
services:
  dynamodb:
    image: amazon/dynamodb-local
    ports:
      - "8000:8000"
    volumes:
      - dynamodata:/data
    command: "-jar DynamoDBLocal.jar -sharedDb -dbPath ."

  app:
    build: .
    ports:
      - "8443:8443"

    environment:
      - SERVER_PORT=8443
      - SERVER_SSL_KEY_STORE=/etc/ssl/key
      - SERVER_SSL_KEY_STORE_TYPE=PKCS12
      - SERVER_SSL_KEY_ALIAS=tomcat
      - SERVER_SSL_KEY_STORE_PASSWORD=xxxxxx
      - SPRING_PROFILES_ACTIVE=aws,local
      - DATAPOWER_ENABLED=true
#      - AMAZON_AWS_DYNAMODB_ENDPOINT=${DYNAMODB_ENDPOINT:-http://dynamodb:8000}  <--- does not work
#      - AMAZON_AWS_DYNAMODB_ENDPOINT=${DYNAMODB_ENDPOINT:-http://xx.xxx.xxx.xxx:8000}  <--- works
      - AMAZON_AWS_DYNAMODB_REGION=${DYNAMODB_REGION:-us-east-1}
      - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-local}
      - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-xxxxxxxxxx}
      - ENV=dev
      - AWS_REGION=us-east-1

volumes:
  dynamodata:
 

Спасибо

Ответ №1:

Попробуйте добавить networks что-то вроде этого:

 version: '3'
services:
  dynamodb:
    image: amazon/dynamodb-local
    ports:
      - "8000:8000"
    volumes:
      - dynamodata:/data
    command: "-jar DynamoDBLocal.jar -sharedDb -dbPath ."
    networks:
      - my-network

  app:
    build: .
    ports:
      - "8443:8443"

    environment:
      - SERVER_PORT=8443
      - SERVER_SSL_KEY_STORE=/etc/ssl/key
      - SERVER_SSL_KEY_STORE_TYPE=PKCS12
      - SERVER_SSL_KEY_ALIAS=tomcat
      - SERVER_SSL_KEY_STORE_PASSWORD=xxxxxx
      - SPRING_PROFILES_ACTIVE=aws,local
      - DATAPOWER_ENABLED=true
#      - AMAZON_AWS_DYNAMODB_ENDPOINT=${DYNAMODB_ENDPOINT:-http://dynamodb:8000}  <--- does not work
#      - AMAZON_AWS_DYNAMODB_ENDPOINT=${DYNAMODB_ENDPOINT:-http://xx.xxx.xxx.xxx:8000}  <--- works
      - AMAZON_AWS_DYNAMODB_REGION=${DYNAMODB_REGION:-us-east-1}
      - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-local}
      - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-xxxxxxxxxx}
      - ENV=dev
      - AWS_REGION=us-east-1
    networks:
      - my-network

volumes:
  dynamodata:

networks:
  my-network:
    driver: bridge