#!/bin/sh # Подготовка изолированного Docker-in-Docker шага Woodpecker. # Запускается внутри privileged-контейнера docker:*-dind: поднимает локальный # dockerd и доустанавливает Java/Python/bash, если их нет в образе. # Хост-Docker сокет не используется. set -eu if ! command -v dockerd >/dev/null 2>&1; then echo "ci-dind.sh: нужен образ docker:-dind" >&2 exit 1 fi export DOCKER_HOST="${DOCKER_HOST:-unix:///var/run/docker.sock}" if ! docker info >/dev/null 2>&1; then echo ">> Запускаю изолированный dockerd..." dockerd-entrypoint.sh >/tmp/ci-dockerd.log 2>&1 & i=0 while [ "$i" -lt 90 ]; do docker info >/dev/null 2>&1 && break sleep 1 i=$((i + 1)) done if ! docker info >/dev/null 2>&1; then echo "dockerd не поднялся:" >&2 tail -50 /tmp/ci-dockerd.log >&2 || true exit 1 fi fi missing="" command -v bash >/dev/null 2>&1 || missing="$missing bash" command -v java >/dev/null 2>&1 || missing="$missing openjdk21-jdk" command -v python3 >/dev/null 2>&1 || missing="$missing python3" command -v node >/dev/null 2>&1 || missing="$missing nodejs" command -v npm >/dev/null 2>&1 || missing="$missing npm" command -v git >/dev/null 2>&1 || missing="$missing git" command -v curl >/dev/null 2>&1 || missing="$missing curl" command -v ss >/dev/null 2>&1 || missing="$missing iproute2" if [ -n "$missing" ]; then echo ">> Устанавливаю в изолированный шаг:$missing" # shellcheck disable=SC2086 apk add --no-cache $missing fi java -version 2>&1 | head -n 1 docker info --format 'Docker server {{.ServerVersion}} (изолированный dind)'