Почему Kaniko не может использовать многоступенчатый Docker Image?
Сборка следующего Dockerfile на GitLab CI с использованием Kaniko приведет к ошибке error pushing image: failed to push to destination eu.gcr.io/stritzke-enterprises/eliah-speech-server:latest: Get https://eu.gcr.io/...: exit status 1
Если я уберу первый FROM
, RUN
а также COPY --from
В соответствии с инструкциями из Dockerfile, изображение Docker создается и отправляется, как и ожидалось. Если я выполняю сборку Kaniko с помощью Docker на моей локальной машине, все работает как положено. Я выполняю другие сборки Kaniko и толкаю на тот же GitLab CI runner с теми же учетными данными GCE Service Account.
Что не так с сборкой Kaniko на основе GitLab CI?
Dockerfile
FROM alpine:latest as alpine
RUN apk add -U --no-cache ca-certificates
FROM scratch
COPY --from=alpine /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
COPY binaries/speech-server /speech-server
EXPOSE 8080
ENTRYPOINT ["/speech-server"]
CMD ["serve", "-t", "$GOOGLE_ACCESS_TOKEN"]
GitLab CI этап сборки
buildDockerImage:
stage: buildImage
dependencies:
- build
image:
name: gcr.io/kaniko-project/executor:debug
entrypoint: [""]
variables:
GOOGLE_APPLICATION_CREDENTIALS: /secret.json
script:
- echo "$GCR_SERVICE_ACCOUNT_KEY" > /secret.json
- /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination $DOCKER_IMAGE:latest -v debug
only:
- branches
except:
- master
0 ответов
Как указал tdensmore, это, скорее всего, проблема аутентификации.
Так что для всех, кто пришел сюда, следующий вызов Dockerfile и Kaniko отлично подойдут.
FROM ubuntu:latest as ubuntu
RUN echo "Foo" > /foo.txt
FROM ubuntu:latest
COPY --from=ubuntu /foo.txt /
CMD ["/bin/cat", "/foo.txt"]
В Dockerfile
можно построить, запустив
docker run -v $(pwd):/workspace gcr.io/kaniko-project/executor:latest --context /workspace --no-push