#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.