更改 amazon/dynamodb-local 端口

Change amazon/dynamodb-local Port

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

根据这个,执行dynamodb java文件时可以使用-port选项。

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

我是否必须制作自己的 Docker 文件,指定 OS 并安装 dynamodb 等等,这样我就可以 运行 java 命令并指定我的端口?

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

docker build -t mydb .

和运行它

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

下面是Docker文件

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/ 没有提到 public github 回购来提出这个问题。

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

    ports:
    - "9000:8000"

解决办法是把端口直接放到命令里, -port 9000 与 docker-compose.

中的 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