フォアグラウンドでApacheサービスを実行しているコンテナがあります。私は他のシェルからそのコンテナーにアクセスしてその中を「突き回し」てファイルを調べることができるようにしたいと思います。現時点では、コンテナーに接続すると、Apacheデーモンを見たままになり、コマンドを実行できなくなります。
実行中のコンテナに別のttyを接続することは可能ですか?おそらく、Dockerが実際には単にLXCコンテナーをラップしているという事実を利用することができますか?私はSudo lxc-console -n [container-id] -t [1-4]
を試しましたが、利用可能にされるのは1つのttyだけであり、それはApacheデーモンを実行しているものです。おそらくビルド中に複数のlxcコンソールを有効にする方法はありますか?
可能であれば、opensshサービスを使って not configureしてコンテナを構築したいと思います。
Docker 1.3では、新しいコマンド docker exec
があります。これにより、実行中の港湾労働者を入力することができます。
docker exec -it [container-id] bash
SSHを使わずにコンテナに入るには、JérômePetazzoniの 'nsenter'というツールを使うべきです。参照してください: https://github.com/jpetazzo/nsenter
単純に実行してインストールします。docker run -v /usr/local/bin:/target jpetazzo/nsenter
その後、コマンドdocker-enter <container-id>
を使用してコンテナに入ります。
更新
Docker 0.9から、以下のステップがうまくいくためには、デーモンを再起動する前に/etc/default/docker
ファイルを'-e lxc'
起動オプションに更新する必要があります(これはホストを再起動することで行いました)。
これがすべての理由です...
... [docker 0.9]には、コンテナを起動するためのLXC以外のAPIの使用を可能にするための新しい「エンジンドライバ」抽象化が含まれています。また、LXCツールを使用せずにコントロールグループを処理できる新しいAPIライブラリ(libcontainer)に基づく新しいエンジンドライバも提供します。主な問題は、コンテナ内でシェルを起動するなど、lxc-attachを使用してコンテナ上でアクションを実行している場合、開発環境にはめったに役に立ちません...
これは新しい docker 0.11のホストオンリーネットワークオプション機能 を妨げ、ループバックインターフェースだけが見えることに注意してください。 バグ報告
別の質問 への解決策もこれに対する解決策であることがわかります。
... docker
ps -notrunc
を使って完全なlxcコンテナIDを取得してから、そのコンテナのrootとしてlxc-attach -n <container_id>
run bashを使うことができます。
更新: 廃止予定のps --no-trunc
の代わりにps -notrunc
を使用する必要があります。
フルコンテナIDを探す
lxc attachコマンドを入力してください。
上は、そのdockerを実行している私のApacheプロセスを示しています。
最初 stepコンテナIDを取得する:
docker ps
これはあなたに何かを示すでしょう
コンテナID画像コマンド作成ステータスポート名
1170fe9e9460 localhost:5000/python:env-7e847468c4d73a0f35e9c5164046ad88 "./run_notebook.sh" 26秒前最大25秒0.0.0.0:8989-> 9999/tcp SLURM_TASK-303337_0
この場合、1170fe9e9460
はコンテナIDです。
2番目 、港湾労働者を入力します。
docker exec -it [container_id] bash
だから上記の場合:docker exec -it 1170fe9e9460 bash
コンテナー内でtmux/GNU Screenを実行することについてはどうですか?シンプルであなたが欲しいだけ多くのvtyにアクセスするためのよりスムーズな方法のようです:
$ docker attach {container id}
nsenter
はそれを行います。しかし、私も簡単な方法でコンテナを入力する必要があり、nsenterは私のニーズには十分ではありませんでした。いくつかの状況でバグがありました(黒い画面と-wdフラグが機能していません)。さらに、私は特定のユーザーとしてそして特定のディレクトリにログインしたいと思いました。
私はコンテナに入るための自分の道具を作ってしまいました。あなたはそれを見つけることができます: https://github.com/Pithikos/docker-enter
その使い方は同じくらい簡単です
./docker-enter [-u <user>] [-d <directory>] <container ID>
"nsinit"方法は次のとおりです。
nsinitをインストール
git clone [email protected]:dotcloud/docker.git
cd docker
make Shell
コンテナの内側から:
go install github.com/dotcloud/docker/pkg/libcontainer/nsinit/nsinit
外から
docker cp id_docker_container:/go/bin/nsinit /root/
これを使って
cd /var/lib/docker/execdriver/native/<container_id>/
nsinit exec bash
docker exec -t -i container_name /bin/bash
コンテナコンソールに連れて行ってくれるでしょう。
実行中のMicrosoft/iisをデーモンとして実行してPowerShellを起動しました。
docker exec -it <nameOfContainer> powershell
港湾労働者の停止
docker start -i container_name
これはUbuntuにログインしているリモート端末で私のために働きました