我正在尝试使用本地Amazon Dynamo DB创建一个docker容器。它确实有效。但是我无法理解如何在Docker文件中为这个图像创建一个表?
通过javascript我创建了一个这样的表:
var params = {
TableName: 'UserActivity',
KeySchema: [
{
AttributeName: 'user_id',
KeyType: 'HASH',
},
{
AttributeName: 'user_action',
KeyType: 'RANGE',
}
],
AttributeDefinitions: [
{
AttributeName: 'user_id',
AttributeType: 'S',
},
{
AttributeName: 'user_action',
AttributeType: 'S',
}
],
ProvisionedThroughput: {
ReadCapacityUnits: 2,
WriteCapacityUnits: 2,
}
};
dynamodb.createTable(params, function(err, data) {
if (err) ppJson(err); // an error occurred
else ppJson(data); // successful response
});
这是我的Docker文件:
FROM openjdk:8-jre-alpine
ENV DYNAMODB_VERSION=latest
RUN apk add --update curl && \
rm -rf /var/cache/apk/* && \
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", "-port", "8000"]
答案 0 :(得分:3)
您需要将DynamoDB客户端指向本地DynamoDB端点。
做类似的事情:
dynamodb = new AWS.DynamoDB({
endpoint: new AWS.Endpoint('http://localhost:8000')
});
dynamodb.createTable(...);
<强>更新强>
或者,您可以使用AWS CLI在本地DynamoDB中创建表,而无需使用JavaSciprt代码。您需要使用&#34; - endpoint-url&#34;将CLI指向您的本地实例,如下所示:
aws dynamodb list-tables --endpoint-url http://localhost:8000
您需要使用create-table命令创建表格。
答案 1 :(得分:0)
主要问题在于我用于本地dynamodb的基本图像。我的意思是 openjdk:8-jre-alpine 看起来高山分布对于本地动力学的功能没有重要意义。 所以这是一个用于本地dynamodb的工作Dockerfile:
FROM openjdk:8-jre
ENV DYNAMODB_VERSION=latest
COPY .aws/ root/.aws/
RUN 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"]
我很高兴看到在这种特殊情况下 alpine 的主要问题。