##Docker導入奮闘記
およそ三日かけてDockerの導入に成功!嬉しかったので記事に残そうと思う。特にエラーの対処について残していく
##エラーその1 タイプミス
エラー文
Invalid value for --database option. Supported for preconfiguration are: mysql, oracle, postgresql, sqlite3, frontbase, ibm_db, sqlserver, jdbcmysql, jdbcsqlite3, jdbcpostgresql, jdbc.
シンプルにタイプミス!docker.compose.ymlの記述に誤りがあった
default: &default
adapter: postgressql #<='s'が多い
encoding: unicode
host: db
username: postgres
password: password
pool: 5
素直に公式ドキュメントから引用すべき!
公式ドキュメント:https://docs.docker.com/compose/rails/#define-the-project
##エラーその2 database.ymlのpassword設定ミス
エラー文
db_1 | Error: Database is uninitialized and superuser password is not specified.
db_1 | You must specify POSTGRES_PASSWORD to a non-empty value for the
db_1 | superuser. For example, "-e POSTGRES_PASSWORD=password" on "docker run".
ここからdocker-compose logs
でエラーログを見始める。(もっと早く確認すれば良かった)
ログからパスワード設定に誤りがあると仮定し、公式ドキュメントを確認したら解説があった。
###公式ドキュメントより引用
最後に、docker-compose.yml魔法が起こる場所です。このファイルには、アプリを構成するサービス(データベースとWebアプリ)、それぞれのDockerイメージを取得する方法(データベースは事前に作成されたPostgreSQLイメージで実行され、Webアプリは現在のディレクトリから構築されます)、そして、それらをリンクしてWebアプリのポートを公開するために必要な構成。
version: "3.9"
services:
db:
image: postgres
volumes:
- ./tmp/db:/var/lib/postgresql/data
# ここのパスワード設定にミスがあった 公式ドキュメントで解決 #
environment:
POSTGRES_PASSWORD: password
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/myapp
ports:
- "3000:3000"
depends_on:
- db
docker-compose.ymlを訂正して解決できた。
##エラーその3 postgresqlのバージョンエラー
デフォルトで設定されるバージョンでエラーが出た。Gemfileを訂正し解決。
##エラーその4 失敗したDBデータが残っていたために出るエラー
全てを削除する、筆者曰く「滅びの言葉」を実行し、初めからやり直すことで導入を完了した。
$ docker-compose down --rmi all --volumes --remove-orphans
参考:《滅びの呪文》Docker Composeで作ったコンテナ、イメージ、ボリューム、ネットワークを一括完全消去する便利コマンド
https://qiita.com/suin/items/19d65e191b96a0079417
大変お世話になりました!ありがとうございました!
##まとめ
dockerについてudemyで勉強しながら導入した。しかし、実際に手元で操作すると実行結果に多くの差が出現した。その際にブログも大いに参考になったが、特に公式ドキュメントを参考にすべきだと、改めて痛感した。また、ログを確認することの重要性を再確認できた。まずはログを確認して、どこを対処しなければいけないかを明確にして作業を進めていくべき。
##参考
- docker公式ドキュメント
https://docs.docker.com/compose/rails/#define-the-project
《滅びの呪文》Docker Composeで作ったコンテナ、イメージ、ボリューム、ネットワークを一括完全消去する便利コマンド
https://qiita.com/suin/items/19d65e191b96a0079417
- PostgreSQL(Docker)にRails(Docker)が接続できなくなったから調べてみた。(could not translate host name "db" to address: Name or service not known)https://qiita.com/at-946/items/2fb75cec5355fad4050d
さいごに
プログラミングの初学者です。その日に学んだことを学習の一環としてアウトプットしています。より深く学習していきたいと考えておりますので、内容に誤りがございまいたらご指摘等いただけますと幸いです。
参考図書:パーフェクト Ruby on Rails【増補改訂版】すがわらまさのり/前島真一/橋立友宏/後藤優一/五十嵐邦明