実行中のdocker containerへのアクセス方法
3717 ワード
containerが起きると、ログを調べたり、操作を実行したりするなど、containerの内部に入ってみたい場合があります.現在、いくつかの方法で実現できます.
これは公式に提供されている方法です.
テスト、まずcontainerを起動します.
終了せずに別の端末を開きます.
これで繋がりました.このとき、いくつかのコマンドを入力すると、両方の端末に表示と出力が表示されます.この方式には大きな限界があり、entrypointまたはプログラムが実行されていることが分かれば、
この方法を使用する場合は、まずdockerがlxc方式で起動されることを保証します.具体的には、修正 dockerサービス を再起動
containerを起動する方法は、以前と同じです.
containerに入るには、次のようにします.
この方式はやはり便利だ.dockerサービスを再起動してlxcで実行する必要があることを前提とし、containerに入ると実行中のプログラムに影響を及ぼさずにコマンドを実行できる端末があります.
dockerがlxcで起動していない場合、実行中のcontainerに入りたい場合はnsenterを使用することも考えられます
このプログラムのインストール方法は独特で、dockerを使用してインストールします.
使い方も簡単で、まずあなたが入るcontainerの
このコマンドでcontainerにアクセスできます.
使いやすいようにスクリプトを書くと自動的に完了します.
これにより、containerに入るたびに
この原理も簡単で、containerの中でsshサービスを起動して、それから
~~~~~~~~~~~~~~~~華麗な分割線~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
docker 1.2.0リリースでは、
このパラメータがあれば便利です.例えば、containerのサービスが何らかの理由で終了した場合、以前は外部プログラムでcontainerを再起動するしかありませんでした.このパラメータがあればcontainerを自動的に再起動することができます.もちろん、失敗した再試行回数を設定することもできます.
公式の2つの例:
1. docker attach
これは公式に提供されている方法です.
テスト、まずcontainerを起動します.
$ docker run -i -t ubuntu bash
root@4556f5ad6067:/#
終了せずに別の端末を開きます.
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4556f5ad6067 ubuntu:14.04 "bash" 45 seconds ago Up 43 seconds jolly_ardinghelli
$ docker attach 4556f5ad6067
root@4556f5ad6067:/#
これで繋がりました.このとき、いくつかのコマンドを入力すると、両方の端末に表示と出力が表示されます.この方式には大きな限界があり、entrypointまたはプログラムが実行されていることが分かれば、
docker attach
を介してアクセスした後は操作が実行できず、1つの端末が終了した後にcontainer全体が終了する.この方法はお勧めしません.2. lxc-attach
この方法を使用する場合は、まずdockerがlxc方式で起動されることを保証します.具体的には、
/etc/default/docker
増加DOCKER_OPTS="-e lxc"
sudo service docker restart
containerを起動する方法は、以前と同じです.
$ docker run -i -t ubuntu bash
root@e7f01f0ff598:/#
containerに入るには、次のようにします.
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e7f01f0ff598 ubuntu:14.04 "bash" 17 seconds ago Up 15 seconds grave_jones
$ ps aux | grep e7f01f0ff598
root 23691 0.0 0.0 43140 1876 pts/9 Ss 21:47 0:00 lxc-start -n e7f01f0ff598c80d70a996135c98fbaeddc6daa61436bbbfa735233e8b6f8ebe -f /var/lib/docker/containers/e7f01f0ff598c80d70a996135c98fbaeddc6daa61436bbbfa735233e8b6f8ebe/config.lxc -- /.dockerinit -g 172.17.42.1 -i 172.17.0.3/16 -mtu 1500 -- bash
ma6174 23756 0.0 0.0 13428 928 pts/12 S+ 21:47 0:00 grep --color=auto e7f01f0ff598
$ sudo lxc-attach -n e7f01f0ff598c80d70a996135c98fbaeddc6daa61436bbbfa735233e8b6f8ebe
root@e7f01f0ff598:/#
この方式はやはり便利だ.dockerサービスを再起動してlxcで実行する必要があることを前提とし、containerに入ると実行中のプログラムに影響を及ぼさずにコマンドを実行できる端末があります.
3. nsenter
dockerがlxcで起動していない場合、実行中のcontainerに入りたい場合はnsenterを使用することも考えられます
このプログラムのインストール方法は独特で、dockerを使用してインストールします.
$ docker run --rm -v /usr/local/bin:/target jpetazzo/nsenter
使い方も簡単で、まずあなたが入るcontainerの
PID
:$ PID=$(docker inspect --format {{.State.Pid}} <container_name_or_ID>)
このコマンドでcontainerにアクセスできます.
$ nsenter --target $PID --mount --uts --ipc --net --pid
使いやすいようにスクリプトを書くと自動的に完了します.
$ cat /bin/docker_enter
#!/bin/bash
sudo nsenter --target `docker inspect --format {{.State.Pid}} $1` --mount --uts --ipc --net --pid bash
これにより、containerに入るたびに
docker_enter <container_name_or_ID>
を実行するだけでよい.4. ssh
この原理も簡単で、containerの中でsshサービスを起動して、それから
ssh
の方式を通じてcontainerの中に上陸して、このような方式を推薦しないで、主にsshの上陸を配置するのが面倒で、sshサービスを開くのも資源を消費して、まったく必要ありません.~~~~~~~~~~~~~~~~華麗な分割線~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
docker 1.2.0リリースでは、
restart
パラメータをサポートし、docker run
で指定できます. --restart="" Restart policy to apply when a container exits (no, on-failure, always)
このパラメータがあれば便利です.例えば、containerのサービスが何らかの理由で終了した場合、以前は外部プログラムでcontainerを再起動するしかありませんでした.このパラメータがあればcontainerを自動的に再起動することができます.もちろん、失敗した再試行回数を設定することもできます.
on-failure:5
で失敗した後、最大5回再起動することを指定します.公式の2つの例:
docker run --restart=always redis
docker run --restart=on-failure:5 redis