У движка контейнера Google возникли проблемы с извлечением изображения из реестра контейнера.
Я пытаюсь создать развертывание на GKE (под управлением 1.6.0), которое выглядит так:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: my-api
spec:
replicas: 1
template:
metadata:
labels:
app: api
spec:
containers:
- name: api
image: eu.gcr.io/<PROJECT>/<IMAGE>:latest
imagePullPolicy: Always
ports:
- containerPort: 3000
env:
- name: NODE_ENV
value: production
resources:
requests:
cpu: 100m
Создание этого происходит со следующим сообщением об ошибке:
Failed to pull image "eu.gcr.io/<PROJECT>/<IMAGE>:latest": rpc error: code = 2 desc = failed to register layer: rename /var/lib/docker/image/overlay/layerdb/tmp/layer-629814250 /var/lib/docker/image/overlay/layerdb/sha256/bd2793152ee77e9d503e981352ff16122b220968ce9df1cc3b49b9704d7dfe28: directory not empty
Error syncing pod, skipping: failed to "StartContainer" for "api" with ErrImagePull: "rpc error: code = 2 desc = failed to register layer: rename /var/lib/docker/image/overlay/layerdb/tmp/layer-629814250 /var/lib/docker/image/overlay/layerdb/sha256/bd2793152ee77e9d503e981352ff16122b220968ce9df1cc3b49b9704d7dfe28: directory not empty"
Другие развертывания, которые выглядят почти одинаково, но используют другой образ, работают как положено. Что не так с изображением, которое я пытаюсь вытащить? И как я могу отладить / исправить это?
1 ответ
Решение
Это может быть вызвано известной ошибкой докера, когда завершение работы происходит до того, как содержимое синхронизируется с диском при создании слоя. Исправление включено в Docker v1.13.
Один временный обходной путь - удаление пустых файлов в каталоге и повторное извлечение образа.