с логами приложения.
Приложение на Yii.
Запускается с помощью docker-compose
docker-compose
version: '3'
services:
web:
image: nginx
restart: always
volumes:
- ./docker/conf/nginx/default.conf:/etc/nginx/conf.d/default.conf
- .:/var/www/html
ports:
- 80:80
depends_on:
- php
php:
image: yiisoftware/yii2-php:7.1-fpm
restart: always
volumes:
- ./docker/conf/php/php.ini:/usr/local/etc/php/conf.d/php.ini
- .:/var/www/html
Всё работает, запускается.
И в приложение добавляются функции, которые логируют свои действия в файлы. Файлы находятся в /var/www/html/data/logs. Всё идёт отлично, в самом контейнере я вижу
$ sudo docker container exec -it php_1 bash
root@16270e4c7275:/app# ls -la /var/www/html/data/logs
total 1
drwxrwxrwx 1 root root 0 Jan 12 02:03 . // разрешения на запись для всех пользователей /var/www/html/data/logs
drwxrwxrwx 1 root root 0 Dec 30 03:12 ..
-rwxrwxrwx 1 root root 104 Jan 12 02:03 12-01-2021.log // сам лог
Было бы замечательно сохранять эти логи при перезапусках контейнера. Для этого используются тома (volume), если я правильно разобрался. Добавляю их использование
docker-compose
php:
image: yiisoftware/yii2-php:7.1-fpm
restart: always
volumes:
- ./docker/conf/php/php.ini:/usr/local/etc/php/conf.d/php.ini
- .:/var/www/html
- useractionlogs:/var/www/html/data/logs
volumes:
pgdata:
useractionlogs:
Но теперь в контейнере я вижу
$ sudo docker container exec -it php_1 bash
root@16270e4c7275:/app# ls -la /var/www/html/data/logs
total 1
drwxr-xr-x 1 root root 0 Jan 12 02:03 . // права на запись только для пользователя root для /var/www/html/data/logs
drwxrwxrwx 1 root root 0 Dec 30 03:12 ..
Я могу конечно в контейнере поправить права
root@f11ac585d3b3:/app# chmod go+rw /var/www/html/data/logs
root@f11ac585d3b3:/app# ls -la /var/www/html/data/logs
total 4
drwxrwxrwx 2 root root 4096 Jan 12 02:19 .
drwxrwxrwx 1 root root 0 Dec 30 03:12 ..
Но так, видимо, надо делать при каждом (пере)создании тома (например, при развёртывании приложения на новой машине)
Может быть есть правильный докер-путь для работы с логами, который я не знаю? Или может как-то настраиваются права для папок?
Заранее спасибо за помощь 😊
Правильный путь - писать логи в stdout/stderr
https://12factor.net/logs
Если не трогать приложение само, то варианты навскидку Ентрипоинт создающий папку с нужными правами Папка создаётся на хосте и биндится с локальным драйвером
Обсуждают сегодня