如何更改通过Amazon Docker映像启动的dynamodb端口?
根据此answer,在执行dynamodb Java文件时可以使用-port
选项。
但是,当使用以下命令运行docker映像时:docker run -p 8000:8000 amazon/dynamodb-local
我没有选择指定dynamodb侦听的端口,仅选择连接我的主机和容器之间的端口。
我必须创建自己的Dockerfile,指定操作系统并安装dynamodb等功能,这样我才能运行java命令并指定端口吗?
答案 0 :(得分: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"]
您将看到端口。
答案 1 :(得分:1)
您不需要重建图像。
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仓库来提出这个问题。
答案 2 :(得分:0)
出于某种原因,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