LoginSignup
16
13

More than 5 years have passed since last update.

どうやってdockerのコンテナに入ればいいですか?

Posted at

はじめに

少しdockerを触っていると、どこからか小学校4年生らしき声が聞こえてくると思います。

どうやってdockerのコンテナに入ればいいですか?

これにざっくり答えてみたいと思います。

SSHは使ってはいけないらしい

仮想OSと同じように、SSHで接続すればいいんでしょ?
そう思ってたけど違うみたいです。

ざっくり言うと、

  • コンテナ内には必要なもの(例: phpとかmysqlとか)だけを入れたい。接続するためだけにSSHは入れたくない。

という考えみたいです。

詳しくをこれを読んでください。
Dockerコンテナ内でSSHDを実行してはいけない理由

ではどうすればいいの?

ぐぐる。 nsinitnsenter のどちらかを使えばいいと分かる。

なるほど!

nsinitとかnsenterって何?

今回はやりません(=よく分かっていない)。良い説明の記事とかあったら誰か教えてくれると助かります。

nsinitもしくはnsenterの入れ方

コンテナに入ってみよう!

1、 エイリアスを使って簡単にしましょう。~/.bashrc に下記のシェルスクリプト関数を記載するか、/etc/profile/ディレクトリ内にdocker.shとか適当に名前付けてファイルを置きましょう。

  • nsenterの場合

    docker-attach()
    {
      pid=$(docker inspect --format '{{.State.Pid}}' $1)
      sudo nsenter --target $pid --mount --uts --ipc --net --pid
    }
  • nsinitの場合

    docker-attach()
    {
      id=$(docker inspect --format '{{.Id}}' $1)
      root=/var/lib/docker/execdriver/native/$id
      sudo sh -c "cd $root && $GOPATH/bin/nsinit exec $2"
    }

2、 docker ps でコンテナIDを取得します。
3、 下記のいずれかの方法で、コンテナIDを引数にして実行すればOKです。

  • nsenterの場合

    docker-attach [コンテナID]
  • nsinitの場合

    docker-attach [コンテナID] /bin/bash

おわりに

Docker1.3以降の場合は下記のdocker execでコンテナに入れるので、この記事のことは全て忘れてください(号泣)
コンテナに入りたい?それ docker exec でできるよ

参考資料

docker-attachのシェル関数は下記からもらいました。
https://gist.github.com/chidakiyo/478c1f74f5097dd832c7
https://gist.github.com/yukinagae/d7368e15f135a8337171

16
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
13