fix: решена проблема с правами доступа к Docker socket

- Обновлен 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)
This commit is contained in:
Сергей Антропов
2025-08-16 11:29:13 +03:00
parent d838026fa6
commit fa42bfa83e
6 changed files with 102 additions and 18 deletions

View File

@@ -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

View File

@@ -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)"

View File

@@ -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

46
docker-compose.root.yml Normal file
View File

@@ -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

View File

@@ -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

View File

@@ -22,6 +22,8 @@ TZ_TS=
# Настройки Docker
DOCKER_HOST=unix:///var/run/docker.sock
DOCKER_TLS_VERIFY=
DOCKER_CERT_PATH=
# Настройки безопасности
# Измените эти значения на свои в продакшене