web-dev-qa-db-ja.com

kubectlbashの完了がubuntudockerコンテナーで機能しない

Macで実行されているDockerコンテナ内からkubectlを使用しています。 kubectlがMacで機能するようにbash補完を正常に構成しましたが、Dockerコンテナー内では機能しません。私はいつも_bash: _get_comp_words_by_ref: command not found_を取得します。

Dockerイメージは_ubuntu:16.04_に基づいており、kubectlは次の行を介してインストールされます(dockerfileからのスニペット)

_curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/AMD64/kubectl && \
mv kubectl /usr/local/bin
_

_echo $BASH_VERSION_は私に4.3.48(1)-releaseを与え、aptによれば、_bash-completion_パッケージがインストールされます。

ターミナルとしてiTerm2を使用しています。

なぜそれが機能しないのか、またはそれを機能させる方法はありますか?

6
DonGiovanni

わかりました。見つけました。source <(kubectl completion bash)の前後にsource /etc/bash_completionを実行する必要がありました。

12
DonGiovanni

MacOSで実行されたLinuxコンテナは別の環境を作成します。そうです、macOS Shellのスレッドのように見えますが、そうではありません。シェルの履歴、プロパティ、機能は別の話です。さらに、コンテナに永続ボリュームがマウントされていない場合、これらのパラメータはすべて一時停止され、コンテナの再起動後も存続しません。

両方のbashを完了するためのアプローチ-macOSとUbuntuLinuxは似ていますが、実行する手順が異なります。

macOS側-kubectlbash補完の永続的なサポート:

自作を使用してサポートをインストールします。

brew install bash-completion
kubectl completion bash > $(brew --prefix)/etc/bash_completion.d/kubectl

Kubectlとbashの完了サポートを組み込むUbuntuコンテナのアプローチ:

この一連のコマンドを適応させて、イメージの準備中にDockerfileで使用できます。

apt-get update && apt-get install -y apt-transport-https
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubectl
echo 'source <(kubectl completion bash)' >> ~/.bashrc

その後、あなたまたはユーザーが実行中のコンテナーで/ bin/bashを実行すると、完了が機能するはずです。

docker exec -it docker_image_id /bin/bash

これにより、bashが完了した状態でbashシェルが開始されます。

0
d0bry