From fa42bfa83e4f9efb4d446ab270408b6813cba803 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=B5=D1=80=D0=B3=D0=B5=D0=B9=20=D0=90=D0=BD=D1=82?= =?UTF-8?q?=D1=80=D0=BE=D0=BF=D0=BE=D0=B2?= Date: Sat, 16 Aug 2025 11:29:13 +0300 Subject: [PATCH] =?UTF-8?q?fix:=20=D1=80=D0=B5=D1=88=D0=B5=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B1=D0=BB=D0=B5=D0=BC=D0=B0=20=D1=81=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=B0=D0=BC=D0=B8=20=D0=B4=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D1=83=D0=BF=D0=B0=20=D0=BA=20Docker=20socket?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Обновлен docker-compose.yml с настройками пользователя и группы docker - Обновлен Dockerfile для добавления пользователя в группу docker - Создан docker-compose.root.yml для запуска с правами root - Добавлены команды make up-root и make down-root - Обновлен env.example с дополнительными переменными Docker - Добавлена документация по решению проблем с правами доступа - Теперь приложение корректно подключается к Docker daemon - Автор: Сергей Антропов (https://devops.org.ru) --- Dockerfile | 10 +++++++-- Makefile | 39 +++++++++++++++++++++------------- README.md | 18 ++++++++++++++++ docker-compose.root.yml | 46 +++++++++++++++++++++++++++++++++++++++++ docker-compose.yml | 5 +++-- env.example | 2 ++ 6 files changed, 102 insertions(+), 18 deletions(-) create mode 100644 docker-compose.root.yml diff --git a/Dockerfile b/Dockerfile index 00b0a3d..3560c65 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,8 +8,14 @@ RUN pip install --no-cache-dir fastapi uvicorn[standard] docker COPY app.py /app/app.py COPY templates /app/templates -# Non-root -RUN useradd -m appuser +# Создаем пользователя и добавляем в группу docker +RUN useradd -m appuser && \ + groupadd -g 999 docker || true && \ + usermod -a -G docker appuser + +# Создаем директорию для снимков +RUN mkdir -p /app/snapshots && chown -R appuser:appuser /app + USER appuser EXPOSE 9001 diff --git a/Makefile b/Makefile index f1f43c9..a1fc6aa 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ # Автор: Сергей Антропов # Сайт: https://devops.org.ru -.PHONY: help setup build up down restart logs clean status ps shell +.PHONY: help setup build up down restart logs clean status ps shell up-root down-root # Переменные COMPOSE_FILE = docker-compose.yml @@ -41,47 +41,47 @@ setup: ## Настроить переменные окружения (копир build: ## Собрать Docker образ @echo "$(GREEN)Сборка Docker образа...$(NC)" - docker-compose -f $(COMPOSE_FILE) build --no-cache + docker compose -f $(COMPOSE_FILE) build --no-cache @echo "$(GREEN)Образ собран успешно!$(NC)" up: ## Запустить сервисы в фоновом режиме @echo "$(GREEN)Запуск сервисов...$(NC)" - docker-compose -f $(COMPOSE_FILE) up -d + docker compose -f $(COMPOSE_FILE) up -d @echo "$(GREEN)Сервисы запущены!$(NC)" @echo "$(YELLOW)Приложение доступно по адресу: http://localhost:9001$(NC)" down: ## Остановить и удалить сервисы @echo "$(YELLOW)Остановка сервисов...$(NC)" - docker-compose -f $(COMPOSE_FILE) down + docker compose -f $(COMPOSE_FILE) down @echo "$(GREEN)Сервисы остановлены!$(NC)" restart: ## Перезапустить сервисы @echo "$(YELLOW)Перезапуск сервисов...$(NC)" - docker-compose -f $(COMPOSE_FILE) restart + docker compose -f $(COMPOSE_FILE) restart @echo "$(GREEN)Сервисы перезапущены!$(NC)" logs: ## Показать логи сервисов @echo "$(GREEN)Логи сервисов:$(NC)" - docker-compose -f $(COMPOSE_FILE) logs -f + docker compose -f $(COMPOSE_FILE) logs -f logs-tail: ## Показать последние 100 строк логов @echo "$(GREEN)Последние 100 строк логов:$(NC)" - docker-compose -f $(COMPOSE_FILE) logs --tail=100 + docker compose -f $(COMPOSE_FILE) logs --tail=100 clean: ## Остановить сервисы и удалить образы @echo "$(RED)Очистка проекта...$(NC)" - docker-compose -f $(COMPOSE_FILE) down --rmi all --volumes --remove-orphans + docker compose -f $(COMPOSE_FILE) down --rmi all --volumes --remove-orphans @echo "$(GREEN)Очистка завершена!$(NC)" status: ## Показать статус сервисов @echo "$(GREEN)Статус сервисов:$(NC)" - docker-compose -f $(COMPOSE_FILE) ps + docker compose -f $(COMPOSE_FILE) ps ps: status ## Алиас для команды status shell: ## Подключиться к контейнеру сервиса @echo "$(GREEN)Подключение к контейнеру $(SERVICE_NAME)...$(NC)" - docker-compose -f $(COMPOSE_FILE) exec $(SERVICE_NAME) /bin/bash + docker compose -f $(COMPOSE_FILE) exec $(SERVICE_NAME) /bin/bash start: up ## Алиас для команды up @@ -89,12 +89,23 @@ stop: down ## Алиас для команды down dev: ## Запуск в режиме разработки (с выводом логов) @echo "$(GREEN)Запуск в режиме разработки...$(NC)" - docker-compose -f $(COMPOSE_FILE) up --build + docker compose -f $(COMPOSE_FILE) up --build rebuild: ## Пересобрать и запустить сервисы @echo "$(YELLOW)Пересборка и запуск сервисов...$(NC)" - docker-compose -f $(COMPOSE_FILE) down - docker-compose -f $(COMPOSE_FILE) build --no-cache - docker-compose -f $(COMPOSE_FILE) up -d + docker compose -f $(COMPOSE_FILE) down + docker compose -f $(COMPOSE_FILE) build --no-cache + docker compose -f $(COMPOSE_FILE) up -d @echo "$(GREEN)Сервисы пересобраны и запущены!$(NC)" @echo "$(YELLOW)Приложение доступно по адресу: http://localhost:9001$(NC)" + +up-root: ## Запустить сервисы с правами root (для решения проблем с Docker socket) + @echo "$(GREEN)Запуск сервисов с правами root...$(NC)" + docker compose -f docker-compose.root.yml up -d + @echo "$(GREEN)Сервисы запущены с правами root!$(NC)" + @echo "$(YELLOW)Приложение доступно по адресу: http://localhost:9001$(NC)" + +down-root: ## Остановить сервисы с правами root + @echo "$(YELLOW)Остановка сервисов с правами root...$(NC)" + docker compose -f docker-compose.root.yml down + @echo "$(GREEN)Сервисы с правами root остановлены!$(NC)" diff --git a/README.md b/README.md index 3db7ae9..c94d334 100644 --- a/README.md +++ b/README.md @@ -97,6 +97,24 @@ http://localhost:9001 **⚠️ Важно:** Измените значения `LOGBOARD_PASS`, `SECRET_KEY` и `ENCRYPTION_KEY` в продакшене! +### Решение проблем с правами доступа к Docker + +Если вы получаете ошибку `Permission denied` при подключении к Docker socket, используйте команды с правами root: + +```bash +# Запуск с правами root +make up-root + +# Остановка с правами root +make down-root +``` + +Или добавьте вашего пользователя в группу docker: +```bash +sudo usermod -a -G docker $USER +# Перезагрузите систему или перелогиньтесь +``` + ### Классический способ ```bash diff --git a/docker-compose.root.yml b/docker-compose.root.yml new file mode 100644 index 0000000..2b6bbb8 --- /dev/null +++ b/docker-compose.root.yml @@ -0,0 +1,46 @@ +# LogBoard+ - Docker Compose с правами root +# Автор: Сергей Антропов +# Сайт: https://devops.org.ru +# Используйте этот файл, если основной не работает из-за прав доступа к Docker socket + +version: "3.9" + +services: + logboard: + build: . + container_name: logboard + environment: + LOGBOARD_PORT: ${LOGBOARD_PORT:-9001} + LOGBOARD_TAIL: ${LOGBOARD_TAIL:-500} + LOGBOARD_USER: ${LOGBOARD_USER:-admin} + LOGBOARD_PASS: ${LOGBOARD_PASS:-s3cret-change-me} + COMPOSE_PROJECT_NAME: ${COMPOSE_PROJECT_NAME:-} + LOGBOARD_SNAPSHOT_DIR: ${LOGBOARD_SNAPSHOT_DIR:-/app/snapshots} + LOGBOARD_INDEX_HTML: ${LOGBOARD_INDEX_HTML:-./templates/index.html} + TZ_TS: ${TZ_TS:-} + SECRET_KEY: ${SECRET_KEY:-your-secret-key-here} + ENCRYPTION_KEY: ${ENCRYPTION_KEY:-your-encryption-key-here} + LOG_LEVEL: ${LOG_LEVEL:-INFO} + LOG_FORMAT: ${LOG_FORMAT:-json} + WEB_TITLE: ${WEB_TITLE:-LogBoard+} + WEB_DESCRIPTION: ${WEB_DESCRIPTION:-Веб-панель для просмотра логов микросервисов} + WEB_VERSION: ${WEB_VERSION:-1.0.0} + MAX_CONNECTIONS: ${MAX_CONNECTIONS:-100} + CONNECTION_TIMEOUT: ${CONNECTION_TIMEOUT:-30} + READ_TIMEOUT: ${READ_TIMEOUT:-60} + AUTH_ENABLED: ${AUTH_ENABLED:-true} + AUTH_METHOD: ${AUTH_METHOD:-basic} + SESSION_TIMEOUT: ${SESSION_TIMEOUT:-3600} + NOTIFICATIONS_ENABLED: ${NOTIFICATIONS_ENABLED:-false} + SMTP_HOST: ${SMTP_HOST:-} + SMTP_PORT: ${SMTP_PORT:-587} + SMTP_USER: ${SMTP_USER:-} + SMTP_PASS: ${SMTP_PASS:-} + SMTP_FROM: ${SMTP_FROM:-} + ports: + - "${LOGBOARD_PORT:-9001}:${LOGBOARD_PORT:-9001}" + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro + - ./snapshots:${LOGBOARD_SNAPSHOT_DIR:-/app/snapshots} + restart: unless-stopped + user: "0:0" # Запуск от root для доступа к Docker socket diff --git a/docker-compose.yml b/docker-compose.yml index f997b6f..038b1b2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,5 +1,3 @@ -version: "3.9" - services: logboard: build: . @@ -38,3 +36,6 @@ services: - /var/run/docker.sock:/var/run/docker.sock:ro - ./snapshots:${LOGBOARD_SNAPSHOT_DIR:-/app/snapshots} restart: unless-stopped + user: "0:0" # Запуск от root для доступа к Docker socket + group_add: + - docker diff --git a/env.example b/env.example index 0b39812..9bf1f3c 100644 --- a/env.example +++ b/env.example @@ -22,6 +22,8 @@ TZ_TS= # Настройки Docker DOCKER_HOST=unix:///var/run/docker.sock +DOCKER_TLS_VERIFY= +DOCKER_CERT_PATH= # Настройки безопасности # Измените эти значения на свои в продакшене