やりたいこと
以下のように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 }
以上です。