2016-07-18 8 views
0

Dockerの初心者からの別の質問があります。現在、Dockerイメージをbashで「デバッグモード」で実行しているため、実行時にアプリケーションのOS環境などを検査できるシェルを入力するために実行中のインスタンスにdocker attachを実行できます。Docker実行インスタンスに接続するためのベストプラクティスの再実行

docker run <image-id> -d -it bash -c “<start application in background>; bash” 

私はすなわちCMD <start application in background>; bashCMD <start application in foreground>からDockerfile内部CMDを変更、私はbashが常に含まなければならないかどうかを疑問に思って。

これは、「プロダクションモード」セキュリティ上の理由から

  1. に不適切である -

    、ドッカーはapplication isolation tool, not an OS virtualization toolであることの光で?実行中のインスタンスにアタッチすることが許可されている

  2. その他の理由でですか?

+1

プロダクションでは使用しないでください。あなたはアプリで何をしていますか?一般的には、あなたのアプリケーションを 'bash'ではなく、最前面プロセス(PID 1)にしたいと思っています。あなたはset-and-forgetのようなコンテナを扱うことに慣れたがっています。あるいは、生産現場にいれば手動でアクセスする必要があるものではありません。 [Cattle vs Kittens]全体(https://www.google.com/search?q=docker%2Bcattle%2Bvs%2Bkittens)のこと。 – ldg

+2

さらに、あなたのdevのコンテナをプロダクションのコンテナと同じにするのが理想的です。したがって、一時的なテストの場合以外のdevでの 'bash'アプローチも使用しません。必要に応じて後でコンテナにいつでも 'exec ...'を付けることができます。 – ldg

+0

@ldg優れています。 (初心者のために、私はまだドッカーの幹部について知らなかった。答えとしてあなたのコメントを書きたいなら、すぐにそれを受け入れるだろう。 – Drux

答えて

3

生産中には行わないでください。

あなたのアプリはbashではなく、最前面のプロセス(PID 1)にします。

理想的には、あなたのdevのコンテナは、あなたのプロダクトのものと同じであるので、私は一時的なテストの状況以外のdevにbashのアプローチを使用しません。後で必要に応じていつでもコンテナにdocker execを入れることができます。例えば、

docker exec -it {container-name} /bin/bash

> -i, --interactive Keep STDIN open even if not attached 
> -t, --tty   Allocate a pseudo-TTY 

変更実行可能ファイルの名前、必要に応じて(例えば、/bin/sh、等)。いくつかのコンテナにはTERM環境変数を設定する必要があります。 (例えば、export TERM=xterm)。

だけ結果を返すと近い、などの-itアウト残すために:あなたは、セットと-忘れのようなコンテナの治療に慣れたい

docker exec {container-name} ifconfig

- あるいは少なくともないあなたが必要なものを一度生産に入ると手動でアクセスできます

関連する問題