我通过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
更新:
- 我可以通过 http://localhost/shell 从主机连接到dynamoDB JS shell 。
- 我无法从应用程序容器连接到 dynamoDB:
wget dynamodb/shell
Connecting to dynamodb (172.18.0.2:80)
wget: can't connect to remote host (172.18.0.2): Connection refused
- 该应用程序是在Scala上编写的,并使用Scanamo与DynamoDB进行交互。
问题在于错过DYNAMO_ACCESS_KEY
和DYNAMO_SECRET_KEY
尽管 dyanmoDB 是本地的并在内存中运行,但它需要 access_key
并以任何方式secret_key
值
此外,这些值不应为空!所以在那里设置任何你想要的东西,比如"foo"或"bar"。
我可以看到数据库和 API 容器之间没有通信。有一个 Docker 链接键值对会有所帮助。请找到更新的 docker 撰写文件。
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
这可能是解决方案,请让我知道状态。