(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Kubernetes/Docker】exec: sh : executable file not found in $PATHとなっているコンテナの中に入る

スポンサーリンク

やりたいこと

以下のようにKubernetes/Docker経由で中に入れないコンテナに入りたい。

# kubectl exec -it coredns-xx sh -n kube-system
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:235: starting container process caused "exec: \"sh\": executable file not found in $PATH"
command terminated with exit code 126
# docker exec -it k8s_coredns_coredns-xx_kube-system_xx sh
rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:235: starting container process caused "exec: \"sh\": executable file not found in $PATH"
環境情報
  • Kubernetes v1.23
  • docker version 1.13

やり方

該当のコンテナのIDを控えた上で

# docker ps...
xx  xx  "/coredns -conf /e..."   ... k8s_coredns_coredns-..._kube-system_...

コマンド調査用のコンテナを同一PIDで動かして内部に入る。

# docker run -it --net=container:xx --pid=container:xx --volumes-from=xx alpine sh
/

以下、補足です。

補足

CoreDNSの中に入りたいと思った際に冒頭のエラーとなりました。

イメージは任意のものでもいいですが、例えばalpineであれば比較的多くのコマンドが打てるため、以下のようにコンテナの内部ファイル情報にアクセスができます。

/ # ls -l /etc/coredns/
total 0
lrwxrwxrwx    1 root     root            ... Corefile -> ..data/Corefile
/ # cat /etc/coredns/..data/Corefile
.:53 {
    errors
    health {
       lameduck 5s
    }
    ready
    kubernetes cluster.local in-addr.arpa ip6.arpa {
       pods insecure
       fallthrough in-addr.arpa ip6.arpa
       ttl 30
    }
    prometheus :9153
    forward . /etc/resolv.conf {
       max_concurrent 1000
    }
    cache 30
    loop
    reload
    loadbalance
}

以上です。