[Laravel][Docker] LaradockのDocker ComposeにDynamoDB Localを組み込む

スポンサーリンク

開発用にホストOSにDynamoDB Localをダウンロードして起動し、Laradockのworkspaceコンテナ内のLaravelからlocalhost:8000のDynamoDB Localを操作しようとしたら
Failed to connect to localhost port 8000
当たり前ですね…workspaceコンテナのlocalhostはworkspaceコンテナなんですから…。

解決策としてネットワーク上のホストOSのIPを指定することもできるのかもしれないですが、せっかくDocker Composeを使っていて、かつAmazon公式のDynamoDB LocalのDockerイメージもあるので、LaradockのDocker Composeのネットワークに組み込みたいと思います。

docker-compose.ymlに追記

サービス名(「dynamodb_local」の部分)は任意です

# services: の中に追加
  dynamodb_local:
    image: amazon/dynamodb-local
    command: -jar DynamoDBLocal.jar -dbPath ./data -sharedDb
    ports:
      - "8000:8000"
    volumes:
      - ./dynamodb/data:/home/dynamodblocal/data
    networks:
      - backend

解説

command

amazon/dynamodb-localのデフォルトの実行コマンドを見ると-inMemoryオプションが入っていてDBファイルが作成されない、-shareDbオプションが入っていないのでめんどくさい、という感じなのでcommandで上書きします。

-shareDb を入れないとデフォルトだとクレデンシャルごとに別のデータが作成されてややこしいので単一にします。
(GUIから作ったあるはずのテーブルにResourceNotFoundExceptionが出る場合はクレデンシャルが違うDBにアクセスしていて、-shareDbで解決することがあります)
-dbPathでデータ保存ディレクトリを指定し、volumesでマウントすることでデータをコンテナがdownされても永続化するようにします。

ports

portsはホストOSでdynamodb-adminなどを起動したときに便利なので8000:8000で繋げておきます。

networks

networksは指定しないとworkspaceコンテナから繋がりません。DB層のコンテナなのでbackendで良いでしょう。

Laravelから接続

これでworkspaceコンテナで動いているLaravelからエンドポイント設定を
http://dynamodb_local:8000
にすることで繋がるようになります。
ホストからもポートフォワーディングされているのでlocalhost:8000で繋がります。

スポンサーリンク
スポンサーリンク
Record
シェアする
フォローする

コメント