Takahiro Octopress Blog

-1から始める情弱プログラミング

Kitematicでエラーが発生してDockerコンテナが作成できない!!

はじめに

前回からだいぶ期間が空いてしまいましたが、久々に書きます!
と言っても今回はDocker For Macアプリに備え付けられている Kitematic に関してのメモです。

KitematicでDockerイメージをダウンロードできない場合の対応

KitematicはGUIで簡単にDockerコンテナを作成できたり、ポートフォワードPrivileged mode などの設定も実に簡単です。
その利便性が頼りがちになってしまうものの、Docker For Macアプリも完璧ではないため、まだまだうまくいかないことが時たまあります。
その1つが『Kitematicを通して、Dockerイメージがダウンロードできない』というものです。

もし、下図のことが発生したら、次の操作を試してみましょう。

Dockerイメージのダウンロードに失敗

1
$ docker pull <Dockerイメージ名>

これで該当するDockerイメージをダウンロードすることができます。

Dockerコンテナでsystemctlコマンドが叩けない

上記対応を進める中でぶつかった話なので書いておきます。
CentOS7.3のDockerイメージをダウンロードして、Dockerコンテナを起動して、Apacheをダウンロード&起動しようとしたところ、表題の問題にぶつかりました。

1
2
$ systemctl status httpd.service
Failed to get D-Bus connection: Operation not permitted

これについて調べてみると、Privileged modeをONにした状態でDockerコンテナを初期化&起動する必要があることがわかりました。
つまり、コマンドで言うところの

1
$ docker run --privileged -d --name httpd centos:latest /sbin/init

という感じです。
因みに上記コマンドは、docker pullの役割も同時に果たしています。
これまた Kitematic の設定でチェックをつけて保存し直してもうまくいかず…

ポートフォワードつきDockerコンテナの初期化

さて、せっかくなのでポートフォワードの設定もコマンドベースで書いていきます。

1
$ docker run -p 8888:80 --name httpd centos:latest /sbin/init

これで、 http://localhost:8888でアクセスしたときにDockerコンテナの80ポートにアクセスすることができるようになります。
Kitematicでポートフォワードの設定はできるのですが、Privileged modeも必要なら下記コマンドのように初めに同時に設定してしまえば良いでしょう。

1
$ docker run --privileged -d -p 8888:80 --name httpd centos:latest /sbin/init

まとめ

今回はDockerコマンドについて少々触れました。
Kitematicが便利だからと言っても、いざという時にコマンドが使えるようになっていると解決の幅が広がりますね。
と言ったところで本日はここまで。

Comments