python - 卷中的持久(本地)dynamoDB 数据缺少权限 - 无法打开数据库文件
问题描述
我在解决以下问题时遇到了很大的麻烦:我正在尝试持久化存储在本地 dynamodb 实例中的数据。我想将整个应用程序容器化在单独的容器中。
这是我的 docker-compose.yml:
version: '3.8'
services:
dynamodb:
image: amazon/dynamodb-local:latest
command: -jar DynamoDBLocal.jar -sharedDb -dbPath /var/lib/dynamodb/data
volumes:
- dynamodb_data:/var/lib/dynamodb/data
ports:
- "8000:8000"
"translation-api":
build: "./application"
ports:
- 5000:5000
volumes:
- ./application:/app
depends_on:
- dynamodb
environment:
AWS_ACCESS_KEY_ID: 'DUMMYIDEXAMPLE'
AWS_SECRET_ACCESS_KEY: 'DUMMYEXAMPLEKEY'
volumes:
dynamodb_data:
它在我的一台机器(Windows)上运行良好,但是当我将我的项目克隆到我的另外两台计算机(一台 Ubuntu 和一台 Windows)时,我收到以下错误代码:
dynamodb_1 | May 14, 2021 10:39:52 AM com.almworks.sqlite4java.Internal log
dynamodb_1 | WARNING: [sqlite] SQLiteQueue[shared-local-instance.db]: stopped abnormally, reincarnating in 3000ms
dynamodb_1 | May 14, 2021 10:39:55 AM com.almworks.sqlite4java.Internal log
dynamodb_1 | WARNING: [sqlite] cannot open DB[40]: com.almworks.sqlite4java.SQLiteException: [14] unable to open database file
dynamodb_1 | May 14, 2021 10:39:55 AM com.almworks.sqlite4java.Internal log
dynamodb_1 | SEVERE: [sqlite] SQLiteQueue[shared-local-instance.db]: error running job queue
dynamodb_1 | com.almworks.sqlite4java.SQLiteException: [14] unable to open database file
dynamodb_1 | at com.almworks.sqlite4java.SQLiteConnection.open0(SQLiteConnection.java:1480)
dynamodb_1 | at com.almworks.sqlite4java.SQLiteConnection.open(SQLiteConnection.java:282)
dynamodb_1 | at com.almworks.sqlite4java.SQLiteConnection.open(SQLiteConnection.java:293)
dynamodb_1 | at com.almworks.sqlite4java.SQLiteQueue.openConnection(SQLiteQueue.java:464)
dynamodb_1 | at com.almworks.sqlite4java.SQLiteQueue.queueFunction(SQLiteQueue.java:641)
dynamodb_1 | at com.almworks.sqlite4java.SQLiteQueue.runQueue(SQLiteQueue.java:623)
dynamodb_1 | at com.almworks.sqlite4java.SQLiteQueue.access$000(SQLiteQueue.java:77)
dynamodb_1 | at com.almworks.sqlite4java.SQLiteQueue$1.run(SQLiteQueue.java:205)
dynamodb_1 | at java.lang.Thread.run(Thread.java:748)
我想我的 docker-compose 存在问题,我尝试将 dynamodb 卷数据存储在“/var/lib/dynamodb/data”中,因为它可能缺乏这样做的适当权限。如果是这样,我正在寻求有关如何解决权限错误的帮助。请帮忙!
(最终目标是将数据保存在我的本地 dynamodb 实例中)
解决方案
出于某种原因,dynamodb 服务需要充当 root 用户才能写入卷。所以只需添加user: root
到您的 dynamodb 服务。
dynamodb:
image: amazon/dynamodb-local:latest
command: -jar DynamoDBLocal.jar -sharedDb -dbPath ./data
volumes:
- dynamodb_data:/var/lib/dynamodb/data
ports:
- "8000:8000"
user: root
请注意,您也可以-dbPath ./data
在命令中使用 relative。
推荐阅读
- node.js - express.js - 如果条件不匹配,则通过中间件重定向到另一个 URL
- asp.net-core - 解决方案资源管理器中的打包选项是什么?
- mysql - (MySQL / MariaDB)为所有表更改创建触发器
- javascript - module.export 未定义对象破坏 node.js
- java - 如何从 Java 中的对象访问“内部变量”?
- google-analytics - Google 分析报告 API 中缺少空值或零值指标
- c++ - 模板函数中的 C++ 左值和右值
- polymer - 我可以在开槽内容上使用 dom-repeat 将每个开槽的孩子包装在某个标签内吗?
- java - SDN5:为 (14762)-[CONTAINS]->(14781) 找到多个匹配的 @RelationshipEntity,但无法确定使用哪一个
- angular5 - 动态图标 PWA 清单