Поменять амазонку / динамод-локальный порт

Как я могу изменить порт, который запускается DynamodB через образ Amazon Docker?

Согласно этому ответу, -port опция может быть использована при выполнении Java-файла dynamicodb.

Однако при запуске образа докера с помощью этой команды: docker run -p 8000:8000 amazon/dynamodb-local У меня нет возможности указать порт, который прослушивает DynamodB, только порт, подключенный между моим хостом и контейнером.

Должен ли я создать свой собственный Dockerfile, указав ОС и установив DynamodB и все такое, чтобы я мог запустить команду java и указать свой порт?

3 ответа

Решение

Я попробовал официальное изображение переопределить точку входа, но произошла какая-то неизвестная ошибка, но вы можете использовать этот подход. Просто создайте новый образ Docker из amazon/dynamodb-local в качестве базового изображения. Построить.

docker build -t mydb .

и запустить его

docker run -it --rm -p 8001:8001 mydb

Ниже находится Dockerfile

FROM amazon/dynamodb-local
WORKDIR /home/dynamodblocal
ENTRYPOINT ["java", "-jar", "DynamoDBLocal.jar", "-port", "8003"]

Как вы увидите порт.

Вам не нужно перестраивать изображение. дела

docker inspect amazon/dynamodb-local

показывает, что точка входа установлена ​​как

  "Entrypoint": [
   "java"
 ],

Таким образом, выполнение команды ниже дает ошибку:

 $ docker run -p 8001:8001 amazon/dynamodb-local -port 8001
 Unrecognized option: -port
 Error: Could not create the Java Virtual Machine.
 Error: A fatal exception has occurred. Program will exit.

потому что мы пытаемся передать аргумент -port в java, но нам нужно передать его в DynamoDBLocal.jar.

Как только мы узнаем это, мы можем добавить jar к запуску Docker, и следующие действия:

$ docker run -p 8001:8001 amazon/dynamodb-local -jar DynamoDBLocal.jar -port 8001

Initializing DynamoDB Local with the following configuration:
Port:   8001
InMemory:       false
DbPath: null
SharedDb:       false
shouldDelayTransientStatuses:   false
CorsParams:     *

Я бы назвал это ошибкой, но https://hub.docker.com/r/amazon/dynamodb-local/ не упоминает публичное репозиторий github, чтобы поднять проблему.

По какой-то причине docker-composeне сопоставляет порты с хостом для Dynamodb. Следующая конфигурация не подойдет для dynamodb-local изображение:

          ports:
    - "9000:8000"

Обходной путь - указать порт напрямую команде, -port 9000 такой же как ports: - "9000:9000" в docker-compose.

      version: "3.8"

services:
  service-dynamodb:
    image: amazon/dynamodb-local
    image: "amazon/dynamodb-local:latest"
    working_dir: /home/dynamodblocal
    # -port {number} is the same as 
    # ports: - {number}:{number} in Docker
    command: "-jar DynamoDBLocal.jar -port 9000 -sharedDb -optimizeDbBeforeStartup -dbPath ./data"
    volumes:
      - ./data:/home/dynamodblocal/data
Другие вопросы по тегам