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を使用しています。
なぜそれが機能しないのか、またはそれを機能させる方法はありますか?
わかりました。見つけました。source <(kubectl completion bash)
の前後にsource /etc/bash_completion
を実行する必要がありました。
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シェルが開始されます。