LoginSignup
5
5

More than 5 years have passed since last update.

Windows環境で、Boot2Dockerを利用して立ち上げたコンテナにrloginでアクセスするまで

Last updated at Posted at 2015-05-28

やったこと

少し前から話題のDockerというやつを、Windowsでも使ってみたくて実験しました。

Windows環境でDockerの実験をするために、Boot2Dockerを使いました。これ自体はDockerコンテナを動かすためのLinuxディストリビューションという位置づけのようですが、Windows向けにVirtualboxを含むAll-in-oneインストーラが用意されているので、インストーラをインストールするだけで手軽に動作環境を構築できます。

こまったこと

  • 適当にぐぐればコンテナを動かすところまでは行くけれども、cmd.exe経由でシェルを操作するのはあまり快適ではない
  • VirtualBox上のBoot2Docker上のコンテナにアクセスすることになるので、ネットワークがどうなっているのかイマイチ分からない

とりあえずboot2dockerとその上のコンテナにrloginでsshできるようになれば最低限の環境は整うのかな? ということで手順を試行錯誤しました。(追記:結局コンテナに直接sshはしませんでした)

boot2dockerへのログイン

boot2dockerのコンソールでboot2docker sshすればログインできるのでしが、このコマンドはlocalhostのポート2022に接続しに行っているっぽい。デフォルトのユーザ名はdocker、パスワードはtcuserになる。同様の設定をrloginに入れればOK。

rlogin-boot2docker.png

ちなみにlocalhost:2022にアクセスすればboot2dockerにつながるのは、VirtualBoxのポートフォワーディング設定にマッピングが書いてあるから。

boot2docker-virtualbox-default-setting.png

コンテナへアクセスするには?

始めはコンテナ側でsshdを動かして、ポートフォワーディングをかける方針で作業を進めていたのですが、どうもこれは良くないという議論があるようです。要点としては

  • そもそもsshでアクセスする必要があるケースはほとんどない
  • 一方で鍵の管理などを考えると運用の煩雑さ等のデメリットがある
  • デバッグ等で本当に必要な時には、ホストからjpetazzo/nsenterを使え

ということらしく。ぐぐって出てくるネットの記事だとsshdを組み込んでいる例も多いのですが、今回はnsenterを使う方針を試しました。

boot2dockerからコンテナへnsenterでアクセスする

とりあえずコンテナの準備。なんでもいいのでCentOSを使う。

docker@boot2docker:~$ docker pull centos:latest
latest: Pulling from centos
6941bfcbbfca: Pull complete 
41459f052977: Pull complete 
fd44297e2ddb: Already exists 
centos:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Digest: sha256:d601d3b928eb2954653c59e65862aabb31edefa868bd5148a41fa45004c12288
Status: Downloaded newer image for centos:latest
docker@boot2docker:~$ docker run -it centos
[root@c7f40c30f8e1 /]# cat /etc/redhat-release 
CentOS Linux release 7.1.1503 (Core) 

記事を書いた時点でのlatestはCentOS 7.1っぽい。

次にnsenterを入れる。boot2docker上で以下のコマンドを実行すればnsenterが使えるようになるっぽい。

$ docker run --rm -v /usr/local/bin:/target jpetazzo/nsenter

nsenterの使い方は公式の記述通りにすれば大丈夫。入りたいコンテナのコンテナIDをdocker psで調べた上で

PID=$(docker inspect --format {{.State.Pid}} b99505115be6)

でPIDを特定し

# nsenter --target $PID --mount --uts --ipc --net --pid

とすることでコンテナに接続できる。実際にはこんな感じでコンテナの中に入ることができた。

docker@boot2docker:~$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
b99505115be6        centos:latest       "/bin/bash"         18 minutes ago      Up 18 minutes                           jolly_heisenberg    
docker@boot2docker:~$ PID=$(docker inspect --format {{.State.Pid}} b99505115be6)
docker@boot2docker:~$ sudo nsenter --target $PID --mount --uts --ipc --net --pid
root@b99505115be6:/# 

まとめ

  • boot2dockerにrloginでアクセスするには、localhost:2021にsshする
  • boot2docker上のコンテナにアクセスするにはnsenterを使う方法がある
    • 直接sshは推奨されない様子がある

参考にした記事

5
5
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
5
5