Почему я получаю сбой exec: container_linux.go:380, когда я захожу в модуль Kubernetes?

#docker #kubernetes #containers

Вопрос:

Я начал изучать Kubernetes и установил minikube и kubectl в Windows 7.

После этого я создал модуль с командой:

 kubectl run firstpod --image=nginx  

И все в порядке:

[![введите описание изображения здесь][1]][1]

Теперь я хочу войти в модуль с помощью этой команды: kubectl exec -it firstpod -- /bin/bash но она не работает, и у меня есть эта ошибка:

 OCI runtime exec failed: exec failed: container_linux.go:380: starting container  process caused: exec: "C:/Program Files/Git/usr/bin/bash.exe": stat C:/Program Files/Git/usr/bin/bash.exe: no such file or directory: unknown command terminated with exit code 126  

Как я могу решить эту проблему?

И еще один вопрос касается этого firstpod модуля. С помощью этой команды kubectl describe pod firstpod я могу просмотреть информацию о модуле:

 Name: firstpod Namespace: default Priority: 0 Node: minikube/192.168.99.100 Start Time: Mon, 08 Nov 2021 16:39:07  0200 Labels: run=firstpod Annotations: lt;nonegt; Status: Running IP: 172.17.0.3 IPs:  IP: 172.17.0.3 Containers:  firstpod:  Container ID: docker://59f89dad2ddd6b93ac4aceb2cc0c9082f4ca42620962e4e692e3d6bcb47d4a9e  Image: nginx  Image ID: docker-pullable://nginx@sha256:644a70516a26004c97d0d85c7fe1d0c3a67ea8ab7ddf4aff193d9f301670cf36  Port: lt;nonegt;  Host Port: lt;nonegt;  State: Running  Started: Mon, 08 Nov 2021 16:39:14  0200  Ready: True  Restart Count: 0  Environment: lt;nonegt;  Mounts:  /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-9b8mx (ro) Conditions:  Type Status  Initialized True  Ready True  ContainersReady True  PodScheduled True Volumes:  kube-api-access-9b8mx:  Type: Projected (a volume that contains injected data from multiple sources)  TokenExpirationSeconds: 3607  ConfigMapName: kube-root-ca.crt  ConfigMapOptional: lt;nilgt;  DownwardAPI: true QoS Class: BestEffort Node-Selectors: lt;nonegt; Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s  node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events:  Type Reason Age From Message  ---- ------ ---- ---- -------  Normal Scheduled 32m default-scheduler Successfully assigned default/firstpod to minikube  Normal Pulling 32m kubelet Pulling image "nginx"  Normal Pulled 32m kubelet Successfully pulled image "nginx" in 3.677130128s  Normal Created 31m kubelet Created container firstpod  Normal Started 31m kubelet Started container firstpod  

Таким образом, я вижу, что это идентификатор контейнера docker, и он запущен, также есть изображение, но если я это сделаю docker images или docker ps ничего нет. Где находятся эти изображения и контейнер? Спасибо! [1]: https://i.stack.imgur.com/xAcMP.jpg

Ответ №1:

Одна ошибка наверняка заключается в том, что gitbash добавляет Windows путь. Вы можете отключить это с помощью двойной косой черты:

 kubectl exec -it firstpod -- //bin/bash  

Эта команда будет работать только в том случае, если у вас есть bash на изображении. Если вы этого не сделаете, вам нужно будет выбрать другую команду для запуска, например /bin/sh . Некоторые изображения не имеют дистрибутива или основаны на scratch, чтобы явно не включать такие вещи, как оболочки, что помешает вам выполнять подобные команды (намеренно, для безопасности).

Комментарии:

1. Почему kubectl добавляет локальный путь к инструкциям сервера, это вообще не имеет смысла. Каковы были их намерения в связи с этим…

2. @DanielW. это не kubectl, это gitbash. Предположительно, для того, чтобы локальные сценарии оболочки работали на стороне Windows.

3. Спасибо @BMitch! Теперь это работает, но если я это сделаю docker images или docker ps почему я не могу видеть этот nginx?

4. @Элвис, у вашего браузера kubernetes установлена прокладка докера, контейнер или что-то еще?

5. @Elvis если вы используете команды kubernetes, оставайтесь с kubectl. Скорее всего, вы находитесь в CRI-контейнере, а k8s находится в другом пространстве имен, чем docker в containerd.