"Не удалось проверить изображение XXX: идентификатор или размер изображения XXX не задан"?
Я пытаюсь развернуть контейнер Docker на экземпляре мини-куба, работающем локально, и получаю эту ошибку, когда он пытается получить (?) Образ. Образ существует в автономном реестре Docker. Образ, с которым я тестирую, собран со следующим Dockerfile:
FROM alpine:latest
ENTRYPOINT ["echo"]
Я использую fabric8io kubernetes-client
библиотека для создания развертывания примерно так:
// 'kube' is an instance of io.fabric8.kubernetes.client.KubernetesClient
final Deployment deployment = kube.extensions().deployments()
.createOrReplaceWithNew()
.withNewMetadata()
.withName(name)
.withNamespace("staging")
.endMetadata()
.withNewSpec()
.withReplicas(1)
.withNewTemplate()
.withNewMetadata()
.addToLabels("app", name)
.endMetadata()
.withNewSpec()
.addNewImagePullSecret()
// "regsecret" is the kubectl-created docker secret
.withName("regsecret")
.endImagePullSecret()
.addNewContainer()
.withName(name)
.withImage(imageName + ":latest")
.endContainer()
.endSpec()
.endTemplate()
.endSpec()
.done();
Это все работает на Arch Linux, ядро Linux 4.10.9-1-ARCH x86_64 GNU/Linux
, С помощью minikube 0.18.0-1
а также kubectl-bin 1.6.1-1
от AUR, docker 1:17.04.0-1
из репозиториев сообщества и докера registry
контейнер в latest
(2.6.1
на момент написания этого). fabric8io kubernetes-client
в версии 2.2.13
,
Я проверил:
- что самостоятельно размещенный реестр работает по HTTPS правильно
- что изображение можно даже потянуть.
docker pull
а такжеdocker run
как на хосте, так и внутри виртуальной машины Minikube работают точно так, как и ожидалось - что изображение работает. См выше
- что в миникубе нет конфликтов имен и т. д. Я удаляю развертывания, наборы реплик и модули между попытками и воссоздаю пространство имен, чтобы быть в безопасности. Тем не менее, я обнаружил, что это не имеет значения, что я и делаю, так как мой код очищает существующие наборы / развертывания pods / replica по мере необходимости
- что DNS не проблема, насколько я могу судить
Я не:
- запускать kubernetes локально (в отличие от minikube), так как пакет AUR для kubernetes занимает невероятно много времени для сборки на моей машине
- прочитайте исходный код kubernetes, так как я не знаю golang
При проверке minikube dashboard
разделы для развертываний, наборов реплик и модулей имеют одинаковую ошибку:
Failed to inspect image "registry_domain/XXX/YYY:latest": Id or size of image "registry_domain/XXX/YYY:latest" is not set
Error syncing pod, skipping: failed to "StartContainer" for "YYY" with ImageInspectError: "Failed to inspect image \"registry_domain/XXX/YYY:latest\": Id or size of image \"registry_domain/XXX/YYY:latest\" is not set"
и журналы стручка навсегда застряли в
container "YYY" in pod "YYY" is waiting to start: ImageInspectError
Поиск сообщения об ошибке приводит меня на https://github.com/kubernetes/minikube/issues/947, но это не та проблема, kube-dns
работает как положено. Это единственный релевантный результат поиска, так как другие результаты, которые появляются
- Slack архив чата, который даже не содержит соответствующего сообщения об ошибке
- Источник kubernetes, который не полезен для меня
- kubernetes/minikube #947, как указано выше
Я, честно говоря, не уверен, куда идти отсюда. Любой совет будет принят во внимание.
2 ответа
Kubernetes 1.6 может быть несовместим с последней версией Docker (17.xx.xx), не могли бы вы понизить версию Docker и повторить попытку.
Рекомендуемая версия Docker в Kubernetes(v1.6) - 1.12, если вы не знаете, как найти эту версию. Используйте это в Ubuntu или Debain:
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 docker.io
Для сентос, ссылка
удалите текущую установку Docker, прежде чем пытаться это
Прежде чем что-либо удалять, вы можете попробовать minikube delete
(если там нет ничего важного или что-то скопировано) и minikube start
чтобы полностью удалить свой предыдущий кластер и попытаться снова вытащить изображение. Это сделало это для меня.