Поменять амазонку / динамод-локальный порт
Как я могу изменить порт, который запускается 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