Docker,Vagrantの学習をメインに続けています。その過程で、DockerfileをビルドしてからRuby,Postgresqlのイメージをpullしてきて簡易的なwebサイトの構築を実施していますが、コンテナが立ち上がらないエラーが発生しました...(泣)
1.エラー
Dockerfileをビルドさせた後に、docker-compose.ymlファイルを作成してdocker-compose up -dをしたら下記のエラーが発生しました。
$ docker-compose up -d
ERROR: In file './docker-compose.yml', volume must be a mapping, not a string.
2.原因
これは、間違いなくdocker-compose.ymlファイルの記述が間違ってますね!でも、どこが間違っているのでしょうか?
"volume must be a mapping"と出力されているので、おそらくホストとコンテナをマウントさせる記述のところですかね?
db:
image: postgres
volumes:
- 'db-data': '/var/lib/postgresql/data'
見つけました!一番下の " - 'db-data': '/var/lib/postgresql/data' "の部分が間違ってます!
解決
では、修正していきましょう。
db:
image: postgres
volumes:
- 'db-data': '/var/lib/postgresql/data'
db:
image: postgres
volumes:
- 'db-data:/var/lib/postgresql/data'
一番下記述のシングルクォーテーションが余分に多かったですね。
その後、docker-compose up -dを実行するとうまくいきました!
3.最後に
docker-compose.ymlファイルは、正しくインデントや空白をつけないとうまく読み込んでくれません。また、コロンやシングルクォーテーションのつけ忘れ等の記述ミスをしやすい特性があります。(ただ単に私が間違えやすいだけww)なので、最初にdocker-composeでエラーが生じたらdocker-compose.ymlファイルに原因がある可能性が大きいので参考にしてみてください。