【问题标题】:Change amazon/dynamodb-local Port更改 amazon/dynamodb-local 端口
【发布时间】:2019-07-03 22:28:48
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: docker amazon-dynamodb amazon-dynamodb-local


    【解决方案1】:

    您不需要重建图像。在做

    docker inspect amazon/dynamodb-local
    

    表示Entrypoint设置为

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

    【讨论】:

    • 对于那些使用docker-compose的人,只需在dynamodb服务下添加command。例如。 command: -jar DynamoDBLocal.jar -port 8001 # pass in custom port to dynamoDB jar file
    【解决方案2】:

    我尝试了官方图像来覆盖入口点,但出现了一些未知错误,但你可以很好地采用这种方法。 只需从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"]
    

    正如您将看到的端口。

    【讨论】:

    • 我想知道您是如何发现将 WORKDIR 更改为 /home/dynamodblocal/ 的,尽管当我将 ENTRYPOINT 更改为 ["/bin/sh"] 然后能够使用 shell 来查看时我明白了图片的目录结构。
    • 我是用docker inspect amazon/dynamodb-local做的
    【解决方案3】:

    由于某种原因,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
    

    【讨论】:

      猜你喜欢
      • 2013-11-21
      • 2016-03-12
      • 1970-01-01
      • 2017-04-05
      • 1970-01-01
      • 2010-09-13
      • 2013-08-20
      • 1970-01-01
      • 2015-04-02
      相关资源
      最近更新 更多