Завершение kubectl bash не работает в Docker-контейнере Ubuntu - PullRequest
0 голосов
/ 18 мая 2018

Я использую kubectl из контейнера Docker, работающего на Mac.Я уже успешно настроил завершение bash для kubectl для работы на Mac, однако оно не работает в контейнере Docker.Я всегда получаю bash: _get_comp_words_by_ref: command not found.

Образ докера основан на 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 в качестве терминала.

Есть идеи, почему он не работает или как заставить его работать?

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Хорошо, я нашел это - мне просто нужно было сделать source /etc/bash_completion до или после source <(kubectl completion bash).

0 голосов
/ 18 мая 2018

Контейнер Linux, выполняемый в macOS, создает отдельную среду, и да, он выглядит как поток из оболочки macOS, но это не так.История оболочки, свойства, функции - это отдельная история.Более того, если в контейнере нет постоянного подключенного тома, все эти параметры будут преобразованы и не выдержат перезапуска контейнера.

Подход к завершению bash для обоих из них - macOS и Ubuntu Linux схожи, нопотребуются различные шаги:

сторона macOS - постоянная поддержка для завершения kubectl bash:

используйте homebrew для установки поддержки:

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 с завершением bash.

...