この記事に関して
Qiitaの3000文字Tips企画の投稿記事になります。
DynamoDBLocal起動時エラー
のDockerタブにあるdocker-comose.ymlを使用する手順通りに実行すると以下のようなエラーが出るケースがあると思います(2021年6月7日時点)。遠くない未来に、コンテナ本体か手順のどちらかが修正されるとは思います。
Starting dynamodb-local ... done
Starting app-test ... done
Attaching to dynamodb-local
dynamodb-local | Initializing DynamoDB Local with the following configuration:
dynamodb-local | Port: 8000
dynamodb-local | InMemory: false
dynamodb-local | DbPath: /home/dynamodblocal/data
dynamodb-local | SharedDb: true
dynamodb-local | shouldDelayTransientStatuses: false
dynamodb-local | CorsParams: *
dynamodb-local |
dynamodb-local | Jun 07, 2021 1:25:32 AM com.almworks.sqlite4java.Internal log
dynamodb-local | WARNING: [sqlite] cannot open DB[1]: com.almworks.sqlite4java.SQLiteException: [14] unable to open database file
dynamodb-local | Jun 07, 2021 1:25:32 AM com.almworks.sqlite4java.Internal log
dynamodb-local | SEVERE: [sqlite] SQLiteQueue[shared-local-instance.db]: error running job queue
dynamodb-local | com.almworks.sqlite4java.SQLiteException: [14] unable to open database file
dynamodb-local | at com.almworks.sqlite4java.SQLiteConnection.open0(SQLiteConnection.java:1480)
dynamodb-local | at com.almworks.sqlite4java.SQLiteConnection.open(SQLiteConnection.java:282)
dynamodb-local | at com.almworks.sqlite4java.SQLiteConnection.open(SQLiteConnection.java:293)
dynamodb-local | at com.almworks.sqlite4java.SQLiteQueue.openConnection(SQLiteQueue.java:464)
dynamodb-local | at com.almworks.sqlite4java.SQLiteQueue.queueFunction(SQLiteQueue.java:641)
dynamodb-local | at com.almworks.sqlite4java.SQLiteQueue.runQueue(SQLiteQueue.java:623)
dynamodb-local | at com.almworks.sqlite4java.SQLiteQueue.access$000(SQLiteQueue.java:77)
dynamodb-local | at com.almworks.sqlite4java.SQLiteQueue$1.run(SQLiteQueue.java:205)
dynamodb-local | at java.lang.Thread.run(Thread.java:748)
対応方法
コンテナ内部では、dynamodblocalというユーザーで処理されているので、そのフォルダに書き込み出来たりする権限が必要です。
標準のdocker-compose.ymlのままいくなら、docker-comose.ymlがあるフォルダで、以下のコマンドで権限振りましょう。起動前ならフォルダ作成もしておきましょう。
mkdir -p ./docker/dynamodb # docker-compose起動前でフォルダ出来てない時に実行
sudo chmod 777 ./docker/dynamodb # 上記状況で、通常ユーザーでフォルダ作ったならsudoはいらない