Bitbucket Pipeline «докер: команда не найдена»

Прочитав статью «Запуск команд Docker в конвейерах Bitbucket», я придумал этот пример конвейера, который пытаюсь построить для репозитория Python.

image: python:3.10-slim

pipelines:
  branches:
   '**':
     - step:
         name: Test Docker Commands
         runs-on:
            - 'self.hosted'
            - 'docker'
            - 'linux'
         services:
            - docker
         script:
            - docker version

definitions:
  services:
     docker:
        memory: 2048

Но я получаю следующую ошибку:

bash: docker: command not found

Я также пытался добавить export DOCKER_BUILDKIT=1, но улучшений не было.

Есть ли что-то, что я упускаю или неправильно понимаю?

Трубопровод выглядит просто отлично. Это должно просто сработать. Я бы посоветовал вам проверить, правильно ли ваши автономные бегуны монтируют механизм докера в вашем контейнере, когда запрашивается служба докера.

N1ngu 25.06.2024 11:33
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
1
1
104
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

 image: python:3.10-slim

Внутри образа Python нет команды Docker. Вам необходимо установить его внутри образа или использовать образ docker:cli.

См. dind — документацию «docker-in-docker», см. изображения и теги докера docker.hub. См. документацию по изображениям конвейеров Bitbucket по умолчанию, см. https://hub.docker.com/r/atlassian/default-image/.

В Bitbucket Pipelines двоичный файл Docker CLI монтируется с помощью «службы докеров» support.atlassian.com/bitbucket-cloud/docs/…, поэтому вы можете использовать любое изображение, кроме docker:dind

N1ngu 25.06.2024 12:54

Нет, я не согласен. Служба докеров запускает другой контейнер в той же сети докеров. Он создает второй контейнер, к которому можно получить доступ по IP-адресу сети. Затем служба Docker запускает демон Docker, который прослушивает команды Docker. Подключены сертификаты демона Docker. Невозможно «монтировать» исполняемые файлы (надежно), например команду docker, из-за несовместимости стандартных библиотек между контейнерами. См. services: в docker-compose.yml, который работает аналогичным образом. Возможно, services: в gitlab-ci.yml имеет лучшую документацию.

KamilCuk 25.06.2024 12:56

Это не Docker Compose и не GitLab CI. Если вы прочитали документацию, на которую я ссылался, то поймете, как это работает в мире Bitbucket Pipelines. Бинарный файл Docker статически связан, поэтому проблем с несовместимостью библиотек нет.

N1ngu 25.06.2024 13:00

Привет. Возможно, вы правы, и я, возможно, прав. Для выполнения статически связанного исполняемого файла по-прежнему требуется glibc. -slim image alpine linux с musl, выполнение двоичного файла которого завершится неудачно с сообщением от компоновщика об отсутствии такого файла или каталога при попытке найти ld.so . Да, вы дали ссылку на документацию, но это пример использования. Это ссылка support.atlassian.com/bitbucket-cloud/docs/…. Есть один способ решить наши разногласия – будьте любезны доказать свою правоту.

KamilCuk 25.06.2024 13:07

@N1ngu Пожалуйста, опубликуйте вывод findmnt и mount изнутри контейнера, работающего с services:. Я очень сомневаюсь, что исполняемый файл docker смонтирован, и это меня сбивает с толку. Если он установлен, будет отображаться mount. В общем, я всегда рад оказаться неправым, пожалуйста, сделайте это. После переосмысления это bash: печать no such file or directory сообщения. Это сообщение подтверждает правильность этого ответа. Пожалуйста, докажите, что это неправильно. Можете ли вы воспроизвести сообщение об ошибке из ОП? Команда docker доступна в образе Atlassian по умолчанию, поэтому она работает в документации.

KamilCuk 25.06.2024 13:09

извините, прошло несколько лет после того, как я потерял доступ к организации Bitbucket, поэтому я не могу отладить ни одно из этих доказательств. Но (1) я никогда не использовал изображение Atlassin по умолчанию, поэтому в документации оно работает не поэтому; (2) Я не смог воспроизвести сообщение об ошибке OP, потому что проблема связана с их автономными бегунами, чего никогда не произойдет в моих или облачных бегунах (3) Сообщение об ошибке OP не доказывает правильность этого ответа; (4) да, монтирование двоичного файла docker казалось странным, когда я начинал, но это работало, общие бегуны не показывали, как было создано задание, но каналы записывают параметр --mount=.../docker:...bin/docker !

N1ngu 25.06.2024 19:34

Давайте продолжим обсуждение в чате.

N1ngu 25.06.2024 19:34
Ответ принят как подходящий

Я нашел решение своей проблемы. Было две основные проблемы:

  • Система Runner: Runner должен был быть основан на Linux Docker.
  • Обновление версии: Мой бегун остался на версии 1.384. Обновление до последней версии (2.4.0) решило проблему, и команды Docker стали доступны.

Спасибо, @N1ngu, за то, что указал мне правильное направление!

Другие вопросы по теме

Команда git для отображения несвязанных ветвей для конкретного пользователя в главном репо
Как мне подключить ssh-ключ для репозитория BitBucket к моему контейнеру, чтобы использовать ссылки ssh git в рабочих процессах Argo?
Проблема с клонированием репозитория git с использованием ssh со вторичным (не по умолчанию) открытым ключом
Как исправить ошибку «Ожидаемый шаг» в декларативном конвейере Дженкинса?
Как запустить сценарий из другого репозитория на локальном средстве запуска Bitbucket в Windows
Старая основная ветка не синхронизирована
Почему я получаю сообщение об ошибке «У учетной записи нет разрешения на доступ к этому ресурсу» при входе в Bitbucket Cloud из XCode?
Не удалось подключиться через SSH к EC2 из конвейера Bitbucket
Синтаксическая ошибка в сценарии Bash, встроенном в привязку YAML для конвейеров Bitbucket
Yarn Install зависает при сборке пакетов в конвейере Bitbucket