(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Docker】Outside of Dockerでコンテナ内からコンテナを操作する

スポンサーリンク

はじめに

コンテナからホスト上のコンテナを操作する「Docker Outdide of Docker」という手法を実際に利用した結果をまとめました。

環境情報
  • Debian GNU/Linux 9
  • Docker Version:19.03.5

コンテナ内でDockerコマンドを利用する

コンテナ内でDockerコマンドを打つためにはDockerがインストールされている必要があります。
今回はlibrary/dockerのイメージを利用しました。

$ docker inspect docker
[
    {
        "Id": "sha256:81f5749c9058a7284e6acd8e126f2b882765a17b9ead14422b51cde1a110b85c",
        "RepoTags": [
            "docker:latest"
        ],
        "RepoDigests": [
            "docker@sha256:f9a24a777e813e2692920a86530355e3840d0271464fd486bd8708aa018d0ac6"
        ],
...

ホスト上のコンテナ情報をコンテナ内から取得する

以下のパスにDockerが利用しているソケットファイルがあります。

$ file /var/run/docker.sock
/var/run/docker.sock: socket

このdocker.socketファイルをDockerコンテナにマウントすることでコンテナ内からホスト上のDockerエンジンに対してAPIが発行できる状態になります

例えば、コンテナ内から自分のコンテナプロセスが確認できてしまいます。

$ docker run -it -v /var/run/docker.sock:/var/run/docker.sock docker /bin/sh
/ # hostname
794f84ba622f
/ # docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
794f84ba622f        docker              "docker-entrypoint.s…"   48 seconds ago      Up 46 seconds

イメージもホスト上で保持しているものがコンテナ内から利用できます。

/ # docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker              latest              81f5749c9058        3 weeks ago         211MB
mongo               latest              3f3daf863757        2 months ago        388MB
hello-world         latest              bf756fb1ae65        6 months ago        13.3kB

終わりに

コンテナの中からコンテナを操作することができるので便利な手法ですが、セキュリティの観点ではホスト上のDockerAPIに対してリクエストを発行できるのでホスト側に影響を与えることもできる点は注意が必要です。

以上、ご参考になれば幸いです。