Упрощение среды разработки команды с глобальными настройками демона Docker
Когда вы работаете с Docker как локально, так и на сервере, часто приходится копировать одни и те же настройки в docker-compose.yml для каждого проекта.
- Устанавливать DNS всегда на
1.1.1.1,8.8.8.8 - Фиксировать драйвер логов
json-file+max-size=10m - Настраивать прокси, insecure registry, диапазон базовой сети и т.д.
Эти параметры можно вынести из конфигурации контейнеров в «глобальные значения хоста», что значительно упрощает управление. Именно для этого предназначен файл глобальных настроек демона Docker (daemon.json).
Ниже разберём:
- какой файл использовать
- где его разместить
- как его написать
- для кого и в каких случаях это будет полезно
1. Два способа настройки демона Docker
Демон Docker (dockerd) можно настроить двумя основными способами:
- Файл JSON‑конфигурации (
daemon.json) ← рекомендуется - Флаги CLI при запуске
dockerd
Можно комбинировать оба подхода, но если один и тот же параметр задать и в флаге, и в daemon.json, демон просто не запустится. Например, если задать --log-driver и в daemon.json указать тот же драйвер, Docker выдаст ошибку при старте.
Для согласованной среды обычно советуем:
«Соберите как можно больше настроек в
daemon.json, а флаги используйте только при необходимости».
2. Где находится daemon.json
Ниже таблица с типичными путями в зависимости от ОС и способа установки:
| Окружение | Путь по умолчанию | Примечание |
|---|---|---|
| Linux (обычная установка) | /etc/docker/daemon.json |
Самый распространённый случай |
| Linux (snap‑установка Docker) | /var/snap/docker/current/config/daemon.json |
Пакет snap для Ubuntu |
| Windows Server / Docker Engine | C:\ProgramData\Docker\config\daemon.json |
Может потребоваться права администратора |
| Docker Desktop (Mac / Windows) | ~/.docker/daemon.json |
Внутренний путь для Desktop |
- Файл может отсутствовать по умолчанию, в таком случае создайте его вручную.
- Для командной и серверной среды обычно берётся путь
/etc/docker/daemon.json.
3. Базовый рабочий процесс: «создать файл → перезапустить демон»
На Linux типичный поток выглядит так:
- Создайте/отредактируйте
daemon.json
{
"dns": ["1.1.1.1", "8.8.8.8"],
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
- Проверьте валидность
sudo dockerd --validate --config-file=/etc/docker/daemon.json
# Если выводит "configuration OK", всё в порядке
- Перезапустите демон
sudo systemctl restart docker
После этого новые контейнеры будут наследовать эти глобальные настройки, если они не переопределены в docker-compose.yml или CLI.
4. Пример 1 – глобальная фиксация DNS‑серверов
4.1 Зачем делать DNS глобальным?
Если контейнеры часто «не могут найти внешние API» или «не резолвят внутренние домены», это обычно связано с настройками DNS хоста. Вместо того чтобы прописывать dns: в каждом docker-compose.yml, удобно задать это в демоне.
4.2 Конфигурация (daemon.json)
{
"dns": ["1.1.1.1", "8.8.8.8"]
}
Если файл уже существует, добавьте ключ "dns": [...] в корневой объект.
⚠️ Важно: DNS‑настройки применяются к
/etc/resolv.confвнутри контейнеров. Уже запущенные контейнеры не обновятся, но новые будут использовать новые значения.
4.3 Для кого это полезно?
- Разработчики в компаниях с прокси и внутренним DNS
- Платформенные команды, работающие в мульти‑облаке
- Локальные разработчики, переключающиеся между VPN
5. Пример 2 – глобальная настройка драйвера логов
Контейнерные логи по умолчанию собираются драйвером json-file в /var/lib/docker/containers/.... Глобальная настройка позволяет задать формат, место хранения и политику ротации.
5.1 Стандартный json-file с ротацией
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "5"
}
}
- Каждый лог‑файл ограничен 10 МБ
- Хранится максимум 5 файлов, остальные удаляются
5.2 Драйвер для централизованного сбора логов (fluentd, journald и др.)
Если нужно отправлять логи в централизованную систему, например Fluentd:
{
"log-driver": "fluentd",
"log-opts": {
"fluentd-address": "localhost:24224",
"tag": "{{.Name}}"
}
}
Для journald:
{
"log-driver": "journald",
"log-opts": {
"tag": "{{.Name}}"
}
}
Тогда можно использовать journalctl -t {container_name} для быстрого просмотра логов.
5.3 Как это сочетается с Compose / docker run
- Глобальные
log-driverиlog-optsдействуют как значения по умолчанию. - Если в Compose указать
logging:или в CLI задать--log-driver, это переопределит глобальные настройки только для конкретного контейнера.
6. Пример 3 – прокси, insecure registry и другие сетевые настройки
6.1 Прокси
{
"proxies": {
"http-proxy": "http://proxy.example.com:3128",
"https-proxy": "http://proxy.example.com:3128",
"no-proxy": "localhost,127.0.0.1,.corp.example.com"
}
}
Docker будет использовать эти прокси при pull‑е образов и во время сборки.
6.2 Insecure registry
{
"insecure-registries": ["my-registry.local:5000"]
}
Используйте только в тестовых средах, так как это снижает безопасность.
7. Пример 4 – диапазон базовой сети, драйвер хранения и др.
7.1 Настройка диапазона bridge‑сети
{
"default-address-pools": [
{
"base": "10.20.0.0/16",
"size": 24
}
]
}
7.2 Принудительный драйвер хранения
{
"storage-driver": "overlay2"
}
Проверьте совместимость драйвера с вашей ОС и ядром.
8. Когда и кому это особенно полезно?
8.1 Локальные разработчики
- Используют одинаковые Docker‑опции в разных проектах
- Переключаются между VPN и прокси
- Не хотят вручную управлять логами и дисковым пространством
8.2 Малые и средние команды
- Избегают «у меня работает, у тебя нет» из-за разной локальной конфигурации
- Синхронизируют CI и локальные среды
- Применяют корпоративные DNS, прокси, реестры
8.3 Платформенные команды / DevOps / SRE
- Управляют десятками/сотнями контейнеров
- Требуется единый подход к логированию, хранению, сети
daemon.jsonстановится «политикой» узла Docker
9. Советы по отладке
- Флаги и дублирование – проверьте unit‑файл systemd (
/lib/systemd/system/docker.service), чтобы убедиться, что там нет конфликтующих флагов. - Docker Desktop – GUI имеет приоритет над ручным редактированием. Если вы меняете файл вручную, убедитесь, что Desktop не перезапишет его.
Итоги
- Глобальные настройки демона Docker находятся в
daemon.json. - На Linux обычно
/etc/docker/daemon.json. - Примеры: DNS, драйвер логов, прокси, insecure registry, диапазон сети, драйвер хранения.
- Глобальные настройки упрощают жизнь как индивидуальных разработчиков, так и команд DevOps.
- Если вы постоянно повторяете одни и те же параметры в
docker-compose.ymlили CLI, стоит перенести их вdaemon.json.

Комментариев нет.