Docker 本地DynamoDB:无法执行HTTP请求—;拒绝连接

Docker 本地DynamoDB:无法执行HTTP请求—;拒绝连接,docker,docker-compose,amazon-dynamodb,Docker,Docker Compose,Amazon Dynamodb,我通过docker compose运行本地DynamoDB和一个应用程序。不幸的是,我在从应用程序查询DynamoDB时遇到错误: Unable to execute HTTP request: Connect to dynamodb:80 [dynamodb/172.18.0.2] failed: Connection refused (Connection refused) 下面是docker compose的外观: version: "3" services: dynamodb:

我通过docker compose运行本地DynamoDB和一个应用程序。不幸的是,我在从应用程序查询DynamoDB时遇到错误:

Unable to execute HTTP request: Connect to dynamodb:80 [dynamodb/172.18.0.2] failed: Connection refused (Connection refused)
下面是docker compose的外观:

version: "3"
services:
  dynamodb:
    image: "dynamodb-local:latest"
    container_name: app-dynamodb
    ports:
      - "80:8000"
  api:
    image: "app-backend:latest"
    container_name: app-api
    ports:
      - "5000:5000"
      - "5100:5100"
    environment:
      - DYNAMO_HOST=dynamodb:80
下面是DynamoDB的Dockerfile的使用方法:

FROM openjdk:8-jre

ENV DYNAMODB_VERSION=latest

COPY .aws/ root/.aws/
COPY setup.sh setup.sh
COPY setup-stats.sh setup-stats.sh

RUN apt-get update && \
    apt-get install -y python python-pip && \
    pip --no-cache-dir install awscli && \
    apt-get clean all && \
    curl -O https://s3-us-west-2.amazonaws.com/dynamodb-local/dynamodb_local_${DYNAMODB_VERSION}.tar.gz && \
    tar zxvf dynamodb_local_${DYNAMODB_VERSION}.tar.gz && \
    rm dynamodb_local_${DYNAMODB_VERSION}.tar.gz

EXPOSE 8000

ENTRYPOINT java -Djava.library.path=. -jar DynamoDBLocal.jar --sharedDb -inMemory
更新:

  • 我可以通过以下方式从主机连接到dynamodbjsshell
  • 我无法从应用程序容器连接到dynamoDB:
  • 该应用程序是在Scala上编写的,使用Scanamo与DynamoDB进行交互

  • 问题在于缺少
    DYNAMO\u访问密钥
    DYNAMO\u机密密钥
    尽管dyanmoDB是本地的,并且在内存中运行,但它无论如何都需要
    access\u key
    secret\u key


    此外,这些值不应为空!因此,可以在那里设置任何您想要的内容,如“foo”或“bar”。

    我可以看到DB和API容器之间没有通信。有一个Docker链接键值对将有所帮助。请查找更新的docker compose文件

    version: "3"
    services:
      dynamodb:
        image: "dynamodb-local:latest"
        container_name: app-dynamodb
        ports:
          - "80:8000"
      api:
        image: "app-backend:latest"
        container_name: app-api
        ports:
          - "5000:5000"
          - "5100:5100"
        links:
          - dynamodb
        environment:
          - DYNAMO_HOST=dynamodb:80
    

    这可能就是解决方案。请让我知道状态。

    您是否尝试在端口8000上连接到dynamo?。我不确定您是否能够从同一网络中的容器连接到端口80上的dynamo,因为端口80将服务公开给外部网络(这就是您能够从主机连接的原因)。与此相反,尝试将
    DYNAMO\u HOST
    env变量更改为
    dynamodb:8000
    我的问题通过我在上面发布的评论得到了解决;)
    version: "3"
    services:
      dynamodb:
        image: "dynamodb-local:latest"
        container_name: app-dynamodb
        ports:
          - "80:8000"
      api:
        image: "app-backend:latest"
        container_name: app-api
        ports:
          - "5000:5000"
          - "5100:5100"
        links:
          - dynamodb
        environment:
          - DYNAMO_HOST=dynamodb:80