せまい部屋

web/gameエンジニアのweblog

docker-compose間でボリューム共有

めも。前任者から引き継いだ趣味プロジェクトがdocker-composeでなにひとつローカル環境が立ち上がれないぶん投げだったので対応してみてるやつ。別docker-composeで、リポジトリAから参照/保存/更新してるelasticsearchをリポジトリBから参照するみたいな感じで、やりたかったことはボリュームの共有

マウントでホスト側のファイルパス書いてしまうような記述でもおそらく要求を満たすことはできるのだろうが、一応別リポジトリなので謎定義になるのがあれなのと、どうせなら名前付きボリュームでパスなど関知せずに済ませたい。と思ったら external なるいい感じのオプションあった

https://docs.docker.com/compose/compose-file/#external

リポジトリA、B共に同じvolumes指定

services:
  ...
  es:
    image: docker.elastic.co/elasticsearch/elasticsearch
    ports:
      - 9200:9200
    volumes:
      - esdata:/usr/share/elasticsearch/data

volumes:
  esdata:
    external: true

ローカルにボリュームがない場合先に作る

ERROR: Volume esdata declared as external, but could not be found. Please create the volume manually using `docker volume create --name=esdata` and try again.
$ docker volume create --name=esdata
esdata

volumesはバージョン3.2から少し凝った記述もできる模様。tmpfsとかはあんまり用途なさそうだけど… https://docs.docker.com/compose/compose-file/#long-syntax-3

今回は小規模&複雑でなし構成なのでリポジトリ一つでモノリシックに詰め込む方針を推したい感想はあるけどさておき動作させてく