2017-01-20 11 views
1

Dockerファイルを使用して作成されたドッカーイメージがあるとします。 Dockerfileを書いているとき、私は何が間違っていたかを理解するために繰り返しテストしなければなりませんでした。ドッカー画像をデバッグするには、単にテストコンテナを実行し、stdout/stderrを見て、何が問題なのかを確認するだけです。オープンシフトを使用してコンテナイメージをデバッグする方法

IMAGE_NAME=authoritative-dns-bind 
IMAGE_OPTIONS=" 
    -v $(pwd)/config.yaml:/config.yaml:ro 
    -p 127.0.0.1:53:53 
    -p 127.0.0.1:53:53/udp" 

docker run -t -i $IMAGE_OPTIONS $IMAGE_NAME 

上記のことは、最小限の作業Dockerコンテナを繰り返し作成してデバッグするのに十分であることを覚えておいてください。今私はOpenShiftで同じことをする方法を探しています。

私は、コンテナがOpenShiftの準備ができていないという事実をよく知っています。ドッカーと同じように、私の計画はそれを実行し、stdoud/stderrを見ることです。私が助けを求めた人々の一人が、私が必要とするもののように見える命令を思いついた。

oc run -i -t --image $IMAGE_NAME --command test-pod -- bash 

そして、上記のコマンドは、ドッキングウィンドウのレジストリからfedora:24fedora:latest画像のために私のためのようで、私が働いてシェルを得ました。しかし、コンテナ化されたサービスで私の派生したイメージには同じことは起こりません。私の説明は、おそらくまったく別のことです。対話的にコマンドを開始するのではなく、対話的に起動し、失敗したコンテナ内でbashを実行しようとします。

私が探しているのは、OpenShiftでコンテナイメージをデバッグする合理的な方法です。 OpenShiftコンテナのstdin/stdoutを少なくともキャプチャして表示できると思っていました。

アイデア?

更新

グラハムoc runによってコメントによると、確かにdocker runとして動作するはずですが、ケースではないようです。オリジナルのFedoraイメージでは、少なくともbashを打つとbashが表示されます。

# oc run -i -t --image authoritative-dns-bind --command test-auth13 -- bash 
Waiting for pod myproject/test-auth13-1-lyng3 to be running, status is Pending, pod ready: false 
Waiting for pod myproject/test-auth13-1-lyng3 to be running, status is Pending, pod ready: false 
Waiting for pod myproject/test-auth13-1-lyng3 to be running, status is Pending, pod ready: false 
... 
Waiting for pod myproject/test-auth13-1-lyng3 to be running, status is Pending, pod ready: false  
^C 
# 

私はそれだけの単純な画像よりも多くの設定を必要としているようだと、まだ提案さoc debugを試してみることができませんでした。 oc runには別の問題があります。そのコマンドは、私が本当に必要としない新しいコンテナと新しいコンテナを作成するためです。デバッグを簡単に開始し、その後コンテナを自動的に破棄する方法があることを願っています。

+0

"コンテナ化されたサービスで私の派生したイメージには起こりません"と言うと、実際に何を見ていましたか?コマンドで '' oc run''を使うときは、何も起動してはならず、与えたコマンドだけを実行するべきです。だからすでに何も失敗していない可能性があります。また、イメージに含まれるアプリケーションを配備しようとしている場合は、 '' oc debug dc mydcname''を使用することもできます。これにより、実際のアプリケーション取得と同じ設定でコンテナが起動しますが、アプリケーションの代わりに端末セッションとシェルが実行される点が異なります。 –

答えて

1

デバッグポッドには3つの主要なコマンドがあります。

  1. oc describe pod $pod-name -

  2. oc exec -ti $pod-name -- bashポッドのstdoutとstderr - ポッド

  3. oc logs $pod-nameに関する詳細な情報 - ポッドを実行中のシェルを取得

具体的な問題:oc runデフォルトプルポリシーはAlwaysに設定されています。これは、OpenShiftが正常に終了するまでイメージをプルしようとし、ローカルのイメージを使用することを拒否することを意味します。

this kuberenetes patchがOpenShift起点になると、プルポリシーは簡単に設定できます。

EDIT:

+0

シェルを入手するには 'oc rsh $ pod-name'を使用することもできます –

+0

' oc logs'コマンドは '認識できない入力ヘッダ'(改行文字なし)を返します。これは期待どおりの結果ではありません。 –

+1

@ fer.marinoもし私の場合のように最初の実験では非常に一般的な容器が動作しないなら、それは役に立たない。 –

0

を書き換えこの質問への最終的な答えを検討し、ご自身のより良い答えをそれに取って代わるないでください...

私は今、次のようなポッドの構成ファイルを使用しています。 ..

apiVersion: v1 
kind: Pod 
metadata: 
    name: "authoritative-dns-server" # pod name, your reference from command line 
    namespace: "myproject" # default namespace in `oc cluster up` 
spec: 
    containers: 
    - command: 
     - "bash" 
     image: "authoritative-dns-bind" # use your image! 
     name: "authoritative-dns-bind-container" # required 
     imagePullPolicy: "Never" # important! you want openshift to use your local image 
     stdin: true 
     tty: true 
    restartPolicy: "Never" 

このコマンドは、明示的にbashに設定されています。その後、ポッドを作成してコンテナに接続し、ドッカーのコマンドを自分で実行できます。

oc create -f pod.yaml 
oc attach -t -i authoritative-dns-server 
/files/run-bind.py 

これは理想から遠くに見える、それは本当にあなたが標準ポッドに構成された通常のopenshiftコンテナのデバッグを支援しませんが、少なくともそれは今、デバッグすることが可能です。より良い答えを楽しみにしています。

関連する問題