#!/usr/bin/env bash ######################################################## # Docker wrappers ######################################################## # Вызывает корректную команду docker compose docker.compose() { require docker argl profiles 0 profiles args=${*/--profiles=[a-zA-Z_,0-9]*/} if $(docker compose &>/dev/null); then local cmd="docker compose $args" elif installed_pkg "docker-compose"; then local cmd="docker-compose $args" warn warn "docker-compose v1 устарел и не поддерживается, его поведение непредсказуемо." warn "Обнови docker согласно документации: https://docs.docker.com/engine/install/" warn else error "Должен быть установлен docker-compose-plugin!" die "Установи docker согласно документации: https://docs.docker.com/engine/install/" 2 fi if [[ "$profiles" ]]; then export COMPOSE_PROFILES=$profiles debug "Выполнено: export COMPOSE_PROFILES=$profiles" fi debug "Команда: $cmd" $cmd } # Выводит информацию о контейнере docker.inspect() { cmd="docker inspect $*" debug "Команда: $cmd" $cmd 2>/dev/null } # Выполняет команду в контейнере от имени root docker.exec() { cmd="docker exec -u root -it $*" debug "Команда: $cmd" $cmd } # Выводит информацию о контейнере docker.inspect() { cmd="docker inspect $*" debug "Команда: $cmd" $cmd 2>/dev/null } docker.ip() { # not finished if [ "$1" ]; then if [ "$1" = "-a" ]; then docker ps -aq \ | xargs -n 1 docker inspect --format '{{.Name}}{{range .NetworkSettings.Networks}} {{.IPAddress}}{{end}}' \ | sed -e 's#^/##' \ | column -t elif [ "$1" = "-c" ]; then docker-compose ps -q \ | xargs -n 1 docker inspect --format '{{.Name}}{{range .NetworkSettings.Networks}} {{.IPAddress}}{{end}}' \ | sed -e 's#^/##' \ | column -t else docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$1" docker port "$1" fi else docker ps -q \ | xargs -n 1 docker inspect --format '{{.Name}}{{range .NetworkSettings.Networks}} {{.IPAddress}}{{end}}' \ | sed -e 's#^/##' \ | column -t fi }