記事の背景
Le Wagon Tokyo (https://www.lewagon.com/ja/tokyo) という、主にRubyとRailsを教えるフランス発の英語のプログラミングスクールを卒業後、Dockerを勉強し始めました。卒業後に取り組んだプロジェクトでDockerの構築を行ったのですが、多くのエラーに直面しました。独学で試行錯誤しながらエラー解決を行ったので、非常に多くの時間がかかってしまいました。私のように、Dockerを初めて触ってエラーに苦労した人も多いと思うので、私が使った解決方法を参考にしていただければと思い、この記事を書くことにしました。
1 PermissionError (Permission denied :‘~~~/your_app/tmp/db’)
Dockerの公式ドキュメントを参照する限り、このエラーはLinuxユーザーだけのようですが、LinuxユーザーにとってPermissionは厄介になりうるので共有します。このエラーは、Dockerが一時的なデータベース(dbフォルダ)を作るのですが、現在ログインしているLinuxユーザーがそのデータベースを使う権利がないため発生します。
まずはこのコマンドでそのテンポラリーフォルダに移動します。
$ cd ~~~(ご自身のアプリまでのパス)/(ご自身のアプリ名)/tmp
以下のコマンドでどのユーザーがdbフォルダを使えるか確認します。
$ ls -la
現在ログインしているLinuxユーザーの名前が表示されていなければ、そのユーザーに以下のコマンドで権限を与えます。
$ sudo chown -R (Linuxユーザーの名前) .
password for (Linuxユーザーの名前):
sudoコマンドなので、パスワードの入力が求められます。ここまで行けば、"docker-compose build"や"docker-compose up"など主要なDockerコマンドは問題なく実行できるはずです。
注:
似たようなエラーで、私は"FATAL: could not open file “
global/pg_filenode.map”: Permission denied"というエラーをよく見たのですが、こちらは"docker-compose stop"→"docker-compose up"でリスタートすれば大丈夫です。
2 No space left on your device
Dockerfileの設定によって、Dockerイメージの容量が大きくなってしまった場合に起きるエラーです。不要なイメージ並びにコンテナは以下のコマンドで簡単に削除できます。
$ docker image prune
$ docker container prune
これらのコマンドを入力すると、以下のメッセージが表示されます。
WARNING! This will remove all dangling images (もしくはcontainers).
Are you sure you want to continue? [y/N]
dangling imagesは不要なイメージという意味なので、"y"を入力してください。容量が確保され、PermissionError解決時と同様の主要なDockerコマンドを実行できるようになっているはずです。
もしもさらに削除する必要がある場合は、以下で削除するイメージを探します。
$ docker images
消したいイメージのIDを確認した後、以下で削除します。
$ docker image rm -f (消したいイメージのID)
参考文献
英語ですが、この本はRuby on RailsのプロジェクトでDockerを使う方法をかなり詳細に論じているので、おすすめです。
Docker for Rails Developers: https://pragprog.com/titles/ridocker/
残念ながら、英語も含めてRails用のDockerの資料はまとまっているものが少ないので、特にRails歴が浅く、Dockerについての易しい資料が読みたいということであれば、英語ですが読む価値はあると思います。
#Mediumの英語の記事
本テーマに関してより詳細に、Mediumに英語で記事を書いたので、そちらもご覧になってみてください。