kubectl bash 完成在 ubuntu docker 容器中不起作用

kubectl bash completion doesn't work in ubuntu docker container

我在 Mac 上的 docker 容器 运行 中使用 kubectl。我已经为 kubectl 成功配置 bash 完成以在 Mac 上工作,但是,它在 docker 容器中不起作用。我总是得到 bash: _get_comp_words_by_ref: command not found

docker 映像基于 ubuntu:16.04 并且 kubectl 通过以下行安装(来自 docker 文件的片段)

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 作为终端。

知道它为什么不起作用或如何让它起作用吗?

在 macOS 上执行的 Linux 容器会创建一个单独的环境并 是的,它看起来像是来自 macOS shell 的线程,但它不是。 Shell 历史, 属性,功能是另一回事。 此外,如果容器没有挂载持久卷,所有这些参数都将被转移,并且不会在容器重启后继续存在。

bash 完成两者的方法 - macOS 和 Ubuntu Linux 相似,但需要采取不同的步骤:

macOS 端 - 永久支持 kubectl bash 完成:

使用自制软件安装支持:

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

Ubuntu 容器的方法有 kubectl 和 bash 完成支持内置:

您可以调整这组命令并在镜像准备期间在 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 shell 开始 bash 完成。

好的,我找到了 - 我只需要在 source <(kubectl completion bash) 之前或之后做一个 source /etc/bash_completion

检查 .bashrc

启用可编程完成功能(您不需要启用 这个,如果它已经在 /etc/bash.bashrc 和 /etc/profile 中启用 来源 /etc/bash.bashrc).

if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi