2

如何通过 Amazon Docker 映像更改 dynamodb 启动的端口?

根据this answer-port执行dynamodb java文件时可以使用该选项。

但是,当使用以下命令运行 docker 映像时:docker run -p 8000:8000 amazon/dynamodb-local我没有指定 dynamodb 侦听的端口的选项,只有主机和容器之间连接的端口。

我是否必须制作自己的 Dockerfile,指定操作系统并安装 dynamodb 等等,这样我才能运行 java 命令并指定我的端口?

4

3 回答 3

5

您不需要重建图像。正在做

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 run 并且以下工作:

$ 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 存储库来提出这个问题。

于 2019-08-26T08:33:47.287 回答
1

我尝试了官方图像来覆盖入口点,但出现了一些未知错误,但你可以很好地采用这种方法。amazon/dynamodb-local只需从基础镜像创建一个新的 Docker镜像。建造。

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"]

正如您将看到的端口。

在此处输入图像描述

于 2019-07-04T09:26:33.803 回答
0

出于某种原因docker-compose,不会将端口映射到 dynamodb 的主机。下一个配置不适用于dynamodb-local图像:

    ports:
    - "9000:8000"

解决方法是将端口直接放到命令中, 与docker-compose-port 9000中相同ports: - "9000:9000"

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
于 2021-02-19T08:13:04.213 回答