卷中的持久(本地)dynamoDB数据缺少权限无法打开数据库文件

2024-05-17 16:21:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我在解决以下问题时遇到了很大困难: 我正在尝试持久化存储在本地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实例中持久化数据)


Tags: 数据comdatavarliblocaljavaopen
1条回答
网友
1楼 · 发布于 2024-05-17 16:21:54

我在this question中找到了解决方案

出于某种原因,dynamodb服务需要充当根用户来写入卷。所以只需将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

相关问题 更多 >