じゃあ、おうちで学べる

本能を呼び覚ますこのコードに、君は抗えるか

逝くな、Docker

概要

大器晩成型のNEETとしては希望に満ちた、Facebookが怖い。私の嫉妬心は枯れるばかりか、年を追うごとにいっそうの混迷と混沌の度合いを深めているようだ。誰かが言ってたんですが男は顔の形の美醜ではなく、まず、清潔感が第一だそうだ。嫉妬心と向き合うのは、清潔感の環境構築が終わってからにしましょう。

まず、「コンテナは仮想マシンの代わりではない」と言いたいです。

前回、Dockerのボリュームマウントに関する権限昇格の記事を書きました。
マウントでdockerがどっかーん。 - じゃあ、おうちで学べる
これらの回避方法について考えていきます。複数あるのですがよく言われるのが

1. 読み取り専用として使う

マウントでdockerがどっかーん。 - じゃあ、おうちで学べるでも説明した通り以下のようなマウントは危険です。

$docker run -t -i -v /var/run/docker.sock:/var/run/docker.sock debian /bin/bash

Dockerで-vを使ってマウントするときのデフォルトはread writeで読み書き可でマウントされます。 /var/run/docker.sockにマウントするとはrootでマウントすることとほぼ同じなので…。 しかし、-マウントをする場合に、最後に:roをつけて下さい。それだけで解決することが出来ます。

$docker run -t -i -v /var/run/docker.sock:/var/run/docker.sock:ro debian /bin/bash

このあと、前回のブログと同じ手順でchrootしていきます。

できない…やったね!!!

まとめ

  • :rw(read write の略) 書き込み読み込み可
  • :ro(read only の略) 読み込み専用 /var/run/docker.sockには、最後に:roをつけること

2.非rootユーザーとして実行する。

ユーザーIDはホストからコンテナに直接マッピングされるため、コンテナ内のroot userはホスト内でも同じ機能を持ちます。簡単に言うと実行ユーザー以上の権限を持つことはデフォルトではしませんよ!!!ということです。

一般ユーザでもDockerのコマンドを扱えるように

$sudo usermod -aG docker `whoami`

では試してみましょう

$docker run -t -i -v /var/run/docker.sock:/var/run/docker.sock:ro debian /bin/bash
docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.

むむむ、つながらねぇ〜

$service docker status
● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: e
   Active: active (running) since 木 2017-03-02 07:17:04 JST; 4min 58s ago
     Docs: https://docs.docker.com
 Main PID: 22551 (dockerd)

まぁ、正常に動いている…。

解決策

Ubuntuの再起動。PCカタカタオタクとしての敗北感に苛まれました。オワリ…。

最後に

これらの方法はサーバーがぶっ飛んだとかを対応するものではありませんのでその辺はkubernetesなどを用いてバックアップを取りましょう。

参照

Docker セキュリティ — Docker-docs-ja 1.9.0b ドキュメント

冷凍うどんとDockerとか…。 - じゃあ、おうちで学べる