error: a container name must be specified for pod ~
kubectlコマンドで、コンテナのログなどを見ようとしたら、上記のようなエラーが出てしまいました。この場合はポッドの中に複数のコンテナがある状態だと予測できます。
解決方法
コンテナのログを確認します。
$ kubectl logs -f helloworld error: a container name must be specified for pod helloworld, choose one of: [aaa bbb]
上記の状態は「aaa」コンテナか「bbb」コンテナどちらか選んでねと言われます。今回は「bbb」の方でログを読む処理をしていますので、-c オプションを付けて、以下のようにコマンドを実行します。
$ kubectl logs -f helloworld -c bbb Hello World!!Goodbye!
エラー再現方法
以下のymlファイルでコンテナを起動してください。
(aaaコンテナでログを出力して、bbbコンテナでログを読もうとしています。)
$ vi helloworld.yml apiVersion: v1 kind: Pod metadata: name: helloworld spec: restartPolicy: OnFailure containers: - name: aaa image: alpine command: ["/bin/sh", "-c"] args: - | exec >> /var/tmp/test/output.log echo -n 'Hello World!!' echo -n 'Goodbye!!' volumeMounts: - name: data-vol mountPath: /var/tmp/test - name: bbb image: alpine command: ["/bin/sh"] args: [ "-c", "tail /var/tmp/test/output.log" ] volumeMounts: - name: data-vol mountPath: /var/tmp/test volumes: - name: data-vol emptyDir: terminationGracePeriodSeconds: 0
起動します。
$ kubectl apply -f helloworld.yml pod/helloworld created
しばらく時間をおいて確認します。STATUSがCompletedなっていたらOKです。
$ kubectl get all NAME READY STATUS RESTARTS AGE pod/helloworld 0/2 Completed 0 15s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4d2h
コンテナのログを確認します。(ここからは上記の解決方法と同じです。)
$ kubectl logs -f helloworld error: a container name must be specified for pod helloworld, choose one of: [aaa bbb]
「aaa」か「bbb」どちらか選んでねと言われます。今回は「bbb」の方でログを読む処理をしていますので、-c オプションを付けて、以下のようにコマンドを実行します。
$ kubectl logs -f helloworld -c bbb Hello World!!Goodbye!
以上です!
コメント