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:
10
Dockerfile
10
Dockerfile
@@ -8,8 +8,14 @@ RUN pip install --no-cache-dir fastapi uvicorn[standard] docker
|
|||||||
COPY app.py /app/app.py
|
COPY app.py /app/app.py
|
||||||
COPY templates /app/templates
|
COPY templates /app/templates
|
||||||
|
|
||||||
# Non-root
|
# Создаем пользователя и добавляем в группу docker
|
||||||
RUN useradd -m appuser
|
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
|
USER appuser
|
||||||
|
|
||||||
EXPOSE 9001
|
EXPOSE 9001
|
||||||
|
|||||||
39
Makefile
39
Makefile
@@ -2,7 +2,7 @@
|
|||||||
# Автор: Сергей Антропов
|
# Автор: Сергей Антропов
|
||||||
# Сайт: https://devops.org.ru
|
# Сайт: 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
|
COMPOSE_FILE = docker-compose.yml
|
||||||
@@ -41,47 +41,47 @@ setup: ## Настроить переменные окружения (копир
|
|||||||
|
|
||||||
build: ## Собрать Docker образ
|
build: ## Собрать Docker образ
|
||||||
@echo "$(GREEN)Сборка Docker образа...$(NC)"
|
@echo "$(GREEN)Сборка Docker образа...$(NC)"
|
||||||
docker-compose -f $(COMPOSE_FILE) build --no-cache
|
docker compose -f $(COMPOSE_FILE) build --no-cache
|
||||||
@echo "$(GREEN)Образ собран успешно!$(NC)"
|
@echo "$(GREEN)Образ собран успешно!$(NC)"
|
||||||
|
|
||||||
up: ## Запустить сервисы в фоновом режиме
|
up: ## Запустить сервисы в фоновом режиме
|
||||||
@echo "$(GREEN)Запуск сервисов...$(NC)"
|
@echo "$(GREEN)Запуск сервисов...$(NC)"
|
||||||
docker-compose -f $(COMPOSE_FILE) up -d
|
docker compose -f $(COMPOSE_FILE) up -d
|
||||||
@echo "$(GREEN)Сервисы запущены!$(NC)"
|
@echo "$(GREEN)Сервисы запущены!$(NC)"
|
||||||
@echo "$(YELLOW)Приложение доступно по адресу: http://localhost:9001$(NC)"
|
@echo "$(YELLOW)Приложение доступно по адресу: http://localhost:9001$(NC)"
|
||||||
|
|
||||||
down: ## Остановить и удалить сервисы
|
down: ## Остановить и удалить сервисы
|
||||||
@echo "$(YELLOW)Остановка сервисов...$(NC)"
|
@echo "$(YELLOW)Остановка сервисов...$(NC)"
|
||||||
docker-compose -f $(COMPOSE_FILE) down
|
docker compose -f $(COMPOSE_FILE) down
|
||||||
@echo "$(GREEN)Сервисы остановлены!$(NC)"
|
@echo "$(GREEN)Сервисы остановлены!$(NC)"
|
||||||
|
|
||||||
restart: ## Перезапустить сервисы
|
restart: ## Перезапустить сервисы
|
||||||
@echo "$(YELLOW)Перезапуск сервисов...$(NC)"
|
@echo "$(YELLOW)Перезапуск сервисов...$(NC)"
|
||||||
docker-compose -f $(COMPOSE_FILE) restart
|
docker compose -f $(COMPOSE_FILE) restart
|
||||||
@echo "$(GREEN)Сервисы перезапущены!$(NC)"
|
@echo "$(GREEN)Сервисы перезапущены!$(NC)"
|
||||||
|
|
||||||
logs: ## Показать логи сервисов
|
logs: ## Показать логи сервисов
|
||||||
@echo "$(GREEN)Логи сервисов:$(NC)"
|
@echo "$(GREEN)Логи сервисов:$(NC)"
|
||||||
docker-compose -f $(COMPOSE_FILE) logs -f
|
docker compose -f $(COMPOSE_FILE) logs -f
|
||||||
|
|
||||||
logs-tail: ## Показать последние 100 строк логов
|
logs-tail: ## Показать последние 100 строк логов
|
||||||
@echo "$(GREEN)Последние 100 строк логов:$(NC)"
|
@echo "$(GREEN)Последние 100 строк логов:$(NC)"
|
||||||
docker-compose -f $(COMPOSE_FILE) logs --tail=100
|
docker compose -f $(COMPOSE_FILE) logs --tail=100
|
||||||
|
|
||||||
clean: ## Остановить сервисы и удалить образы
|
clean: ## Остановить сервисы и удалить образы
|
||||||
@echo "$(RED)Очистка проекта...$(NC)"
|
@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)"
|
@echo "$(GREEN)Очистка завершена!$(NC)"
|
||||||
|
|
||||||
status: ## Показать статус сервисов
|
status: ## Показать статус сервисов
|
||||||
@echo "$(GREEN)Статус сервисов:$(NC)"
|
@echo "$(GREEN)Статус сервисов:$(NC)"
|
||||||
docker-compose -f $(COMPOSE_FILE) ps
|
docker compose -f $(COMPOSE_FILE) ps
|
||||||
|
|
||||||
ps: status ## Алиас для команды status
|
ps: status ## Алиас для команды status
|
||||||
|
|
||||||
shell: ## Подключиться к контейнеру сервиса
|
shell: ## Подключиться к контейнеру сервиса
|
||||||
@echo "$(GREEN)Подключение к контейнеру $(SERVICE_NAME)...$(NC)"
|
@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
|
start: up ## Алиас для команды up
|
||||||
|
|
||||||
@@ -89,12 +89,23 @@ stop: down ## Алиас для команды down
|
|||||||
|
|
||||||
dev: ## Запуск в режиме разработки (с выводом логов)
|
dev: ## Запуск в режиме разработки (с выводом логов)
|
||||||
@echo "$(GREEN)Запуск в режиме разработки...$(NC)"
|
@echo "$(GREEN)Запуск в режиме разработки...$(NC)"
|
||||||
docker-compose -f $(COMPOSE_FILE) up --build
|
docker compose -f $(COMPOSE_FILE) up --build
|
||||||
|
|
||||||
rebuild: ## Пересобрать и запустить сервисы
|
rebuild: ## Пересобрать и запустить сервисы
|
||||||
@echo "$(YELLOW)Пересборка и запуск сервисов...$(NC)"
|
@echo "$(YELLOW)Пересборка и запуск сервисов...$(NC)"
|
||||||
docker-compose -f $(COMPOSE_FILE) down
|
docker compose -f $(COMPOSE_FILE) down
|
||||||
docker-compose -f $(COMPOSE_FILE) build --no-cache
|
docker compose -f $(COMPOSE_FILE) build --no-cache
|
||||||
docker-compose -f $(COMPOSE_FILE) up -d
|
docker compose -f $(COMPOSE_FILE) up -d
|
||||||
@echo "$(GREEN)Сервисы пересобраны и запущены!$(NC)"
|
@echo "$(GREEN)Сервисы пересобраны и запущены!$(NC)"
|
||||||
@echo "$(YELLOW)Приложение доступно по адресу: http://localhost:9001$(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)"
|
||||||
|
|||||||
18
README.md
18
README.md
@@ -97,6 +97,24 @@ http://localhost:9001
|
|||||||
|
|
||||||
**⚠️ Важно:** Измените значения `LOGBOARD_PASS`, `SECRET_KEY` и `ENCRYPTION_KEY` в продакшене!
|
**⚠️ Важно:** Измените значения `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
|
```bash
|
||||||
|
|||||||
46
docker-compose.root.yml
Normal file
46
docker-compose.root.yml
Normal 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
|
||||||
@@ -1,5 +1,3 @@
|
|||||||
version: "3.9"
|
|
||||||
|
|
||||||
services:
|
services:
|
||||||
logboard:
|
logboard:
|
||||||
build: .
|
build: .
|
||||||
@@ -38,3 +36,6 @@ services:
|
|||||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||||
- ./snapshots:${LOGBOARD_SNAPSHOT_DIR:-/app/snapshots}
|
- ./snapshots:${LOGBOARD_SNAPSHOT_DIR:-/app/snapshots}
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
user: "0:0" # Запуск от root для доступа к Docker socket
|
||||||
|
group_add:
|
||||||
|
- docker
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ TZ_TS=
|
|||||||
|
|
||||||
# Настройки Docker
|
# Настройки Docker
|
||||||
DOCKER_HOST=unix:///var/run/docker.sock
|
DOCKER_HOST=unix:///var/run/docker.sock
|
||||||
|
DOCKER_TLS_VERIFY=
|
||||||
|
DOCKER_CERT_PATH=
|
||||||
|
|
||||||
# Настройки безопасности
|
# Настройки безопасности
|
||||||
# Измените эти значения на свои в продакшене
|
# Измените эти значения на свои в продакшене
|
||||||
|
|||||||
Reference in New Issue
Block a user