Невозможно создать образ docker в конвейере Bitbucket

#docker #bitbucket #bitbucket-pipelines

#docker #bitbucket #bitbucket-конвейеры

Вопрос:

Когда я пытаюсь создать образ для своего приложения, образ, который зависит от buildkit, я получаю сообщение об ошибке: failed to dial gRPC: unable to upgrade to h2c, received 403

Я могу создавать стандартные образы docker, но если он полагается на Buildkit, я получаю ошибки

В частности, команда, которая завершается с ошибкой, является:

docker build --ssh default --no-cache -t worker $BITBUCKET_CLONE_DIR/worker

Я bitbucket-pipelines.yml таков: первые две команды сборки docker работают, и изображения генерируются, однако третья, которая полагается на buildkit, этого не делает.

 image: docker:stable

pipelines:
  default:
    - step:
      name: build
      size: 2x
      script:
         - docker build -t alpine-base $BITBUCKET_CLONE_DIR/supporting/alpine-base
         - docker build -t composer-xv:latest $BITBUCKET_CLONE_DIR/supporting/composer-xv
         - apk add openssh-client
         - eval `ssh-agent`
         - export DOCKER_BUILDKIT=1
         - docker build --ssh default --no-cache -t worker $BITBUCKET_CLONE_DIR/worker
         - docker images

      services:
       - docker
      caches:
       - docker
  

Мой файл Dockerfile выглядит следующим образом:

 # syntax=docker/dockerfile:1.0.0-experimental
FROM composer:1.7 as phpdep

COPY application/database/ database/

COPY application/composer.json composer.json
COPY application/composer.lock composer.lock

# Install PHP dependencies in 'vendor'
RUN --mount=type=ssh composer install 
    --ignore-platform-reqs 
    --no-dev 
    --no-interaction 
    --no-plugins 
    --no-scripts 
    --prefer-dist

#
# Final image build stage
#
FROM alpine-base:latest as final

ADD application /app/application
COPY --from=phpdep /app/vendor/ /app/application/vendor/
ADD entrypoint.sh /entrypoint.sh

RUN 
    apk update amp;amp; 
    apk upgrade amp;amp; 
    apk add 
        php7 php7-mysqli php7-mcrypt php7-gd 
        php7-curl php7-xml php7-bcmath php7-mbstring 
        php7-zip php7-bz2 ca-certificates php7-openssl php7-zlib 
        php7-bcmath php7-dom php7-json php7-phar php7-pdo_mysql php7-ctype 
        php7-session php7-fileinfo php7-xmlwriter php7-tokenizer php7-soap 
        php7-simplexml amp;amp; 
    cd /app/application amp;amp; 
    cp .env.example .env amp;amp; 
    chown nobody:nobody /app/application/.env amp;amp; 
    sed -i 's/;openssl.capath=/openssl.capath=/etc/ssl/certs/' /etc/php7/php.ini amp;amp; 
    sed -i 's/memory_limit = 128M/memory_limit = 1024M/' /etc/php7/php.ini amp;amp; 
    apk del --purge curl wget amp;amp; 
    mkdir -p /var/log/workers amp;amp; 
    mkdir -p /run/php amp;amp; 
    echo "export PS1='WORKER h:w$ '" >> /etc/profile

COPY files/logrotate.d/ /etc/logrotate.d/

CMD ["/entrypoint.sh"]
  

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

1. Я не знаком с Bitbucket, но в Gitlab я исправил аналогичную проблему, используя бегун оболочки вместо образа docker.

2. Я боролся с той же проблемой. Похоже, что bitbucket на данный момент не поддерживает экспериментальные функции сборки. Возможно, вы сможете заставить его работать, следуя инструкциям здесь: github.com/docker/cli/blob/master/experimental/README.md

3. Тем временем вы можете просто удалить экспериментальный синтаксис во время сборки: [[ -n "${BITBUCKET_COMMIT}" ]] amp;amp; sed -i.bak 's/ --mount=[^ ]*//g' Dockerfile

Ответ №1:

Похоже, конвейеры Bitbucket не поддерживают DOCKER_BUILDKIT, см.: https://jira.atlassian.com/browse/BCLOUD-17590?focusedCommentId=3019597amp;page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-3019597 . Они говорят, что ждут этого;https://github.com/moby/buildkit/pull/2723 будет исправлено…

Ответ №2:

Вы можете попробовать еще раз, поскольку с июля 2022 года у вас:

Объявляем о поддержке Docker BuildKit в конвейерах Bitbucket

(Джаянт Гавали, команда Atlassian)

Мы рады сообщить, что теперь доступна одна из самых популярных функций для конвейеров Bitbucket, Docker BuildKit. Теперь вы можете создавать образы Docker с помощью утилиты BuildKit.

С помощью BuildKit вы можете воспользоваться различными функциями, которые он предоставляет, такими как:

  • Производительность: BuildKit использует параллелизм и внутреннее кэширование для ускорения сборки образов.
  • Секреты: смонтируйте секреты и создайте образы безопасно.
  • Кэш: монтируйте кеши для сохранения повторной загрузки всех внешних зависимостей каждый раз.
  • SSH: смонтировать ключи SSH для создания образов.

Настройка вашего bitbucket-pipelines.yaml

BuildKit теперь доступен с помощью службы Docker Daemon.
Он не включен по умолчанию и может быть включен путем установки переменной среды DOCKER_BUILDKIT=1 в конфигурации конвейеров.

 pipelines:
 default:
   - step:
       script:
         - export DOCKER_BUILDKIT=1
         - docker build --secret id=mysecret,src=mysecret.txt .
       services:
         - docker
  

Чтобы узнать больше о том, как его настроить, пожалуйста, обратитесь к документации поддержки и для получения информации о Docker Buildkit, посетите: Документы Docker? Создавайте образы с помощью BuildKit.

Пожалуйста, обратите внимание:

  • Используйте многоступенчатые сборки для использования параллелизма.
  • Кэширование не является общим для разных сборок и ограничено сборкой, запущенной на том же узле docker, где выполняется сборка.
  • С помощью BuildKit секреты могут быть надежно смонтированы, как показано выше.
  • Для получения информации об ограничениях, пожалуйста, обратитесь к разделу ограничений нашей документации поддержки.