docker起動時のエラーと対処方まとめ

プロジェクトでdockerを使っていて困ったときのエラーと対処方法についてまとめていきます。dockerでの問題が起きたときやお困りごとがありましたら是非。

関連記事
フロントエンドエンジニアが新規プロジェクトを開発しやすくするためにDockerを導入してみた。Dockerの導入方法

docker-compose up -dで上手く起動できないとき

この問題の解決につきましては、コンテナやイメージの削除をしてみて、再度起動してみるというのが簡単な方法ですが、そもそもコンテナの削除ができなかったときの事象について書いておきます。

◼︎ コンテナの削除をするときにまず動いているか確認する

$ docker ps -a
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS               NAMES
187f168d2b8c        server_adm   "go run adm/"   6 minutes ago       Dead                                   adm_1
docker ps -aで、CONTAINER IDを控えておきます。

dockerのコンテナの削除

◼︎ CONTAINER IDをコピーして、コンテナの削除をしようとしたら、怒られる

$ docker rm 187f168d2b8c
Error response from daemon: Driver aufs failed to remove root filesystem 187f168d2b8c4954578b97f39056524f79f9eb25e54ee1262f4ba9ccf82c3e35: rename /var/lib/docker/aufs/mnt/e14e50a7633d505466f15f1dddc9f1a0048fe5b4a2395294ca799c49cacdd3b2 /var/lib/docker/aufs/mnt/e14e50a7633d505466f15f1dddc9f1a0048fe5b4a2395294ca799c49cacdd3b2-removing: structure needs cleaning

Githubにも同じissueが結構上がっていたので再現性の高い問題かと思いますが、ここで解決策としてあげられているumountをしてみても解決しなかった。

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
6563dd842a83        postgres:9.4        "/docker-entrypoint.s"   25 hours ago        Dead                                    tiny_franklin
ac749a08434d        postgres:9.4        "/docker-entrypoint.s"   25 hours ago        Dead                                    trusting_kirch

$ mount
...
none on /var/lib/docker/aufs/mnt/ac749a08434dd9508503c6bdd43dfb09726646a4a79593500d8f5c913cda3a71 type aufs (rw,relatime,si=66a2e49a9d580fd1,dio)
none on /var/lib/docker/aufs/mnt/6563dd842a838b42eac342d3aef4ba2f4a989dca8d9cd562725687e8e23a3d5c type aufs (rw,relatime,si=66a2e49e760e7fd1,dio)

$ sudo umount /var/lib/docker/aufs/mnt/ac749a08434dd9508503c6bdd43dfb09726646a4a79593500d8f5c913cda3a71
$ sudo umount /var/lib/docker/aufs/mnt/6563dd842a838b42eac342d3aef4ba2f4a989dca8d9cd562725687e8e23a3d5c

$ docker rm 6563
$ docker rm ac74
$ docker ps -a

https://github.com/docker/docker/issues/9665

上記で解決している人もいるですが、解決しなかったので次のdocker composeを削除を試してみました。

docker composeの削除

● そのあと色々調べているとdocker-composeを削除してみて、再度インストールしてみましたがこちらもダメでした。
docker-compose自体の削除もできなかったので、そもそもコンテナが削除できない状態です。

$ docker-compose rm
Failed to write all bytes for libssl.1.0.0.dylib

$ docker-compose ps
Failed to write all bytes for .Python

下記を試してみてdocker-compose周りで混迷を深めそうだったので、そもそもdocker-composeのプロセスを停止するためにPC自体を再起動。

そして改めて、docker-composeを起動してみると無事成功しました。
筆者のプロジェクトでは、apiとmysql、管理画面系のadmを動かしているので、無事コンテナが作成されて動いているのが確認できました。

$ docker-compose up -d
Please be aware that .yml is the expected extension in most cases, and using .yaml can cause compatibility issues in future.

Creating api_1...
Creating mysql_1...
Creating adm_1...

dockerは複雑だけど楽になる

フロントエンドエンジニアでもdockerを使うべきですよね。サービス・アプリなどを開発しているとどうしても環境ごとで「データや何かが違ってしまう」事があります。その違いについて無駄なコミュニケーションコストを支払うのは嫌ですよね。

インフラやサーバーに携わっていないと導入するのにも時間を要しますが、一度入れてしまえばかなり開発が楽になります。ぜひ試してみてください。