dockerd

daemon

Usage: dockerd COMMAND

A self-sufficient runtime for containers.

Options:
      --add-runtime runtime                   Register an additional OCI compatible runtime (default [])
      --allow-nondistributable-artifacts list Allow push of nondistributable artifacts to registry
      --api-cors-header string                Set CORS headers in the Engine API
      --authorization-plugin list             Authorization plugins to load
      --bip string                            Specify network bridge IP
  -b, --bridge string                         Attach containers to a network bridge
      --cgroup-parent string                  Set parent cgroup for all containers
      --config-file string                    Daemon configuration file (default "/etc/docker/daemon.json")
      --containerd string                     containerd grpc address
      --containerd-namespace string           Containerd namespace to use (default "moby")
      --containerd-plugins-namespace string   Containerd namespace to use for plugins (default "plugins.moby")
      --cpu-rt-period int                     Limit the CPU real-time period in microseconds for the
                                              parent cgroup for all containers
      --cpu-rt-runtime int                    Limit the CPU real-time runtime in microseconds for the
                                              parent cgroup for all containers
      --cri-containerd                        start containerd with cri
      --data-root string                      Root directory of persistent Docker state (default "/var/lib/docker")
  -D, --debug                                 Enable debug mode
      --default-address-pool pool-options     Default address pools for node specific local networks
      --default-cgroupns-mode string          Default mode for containers cgroup namespace ("host" | "private") (default "host")
      --default-gateway ip                    Container default gateway IPv4 address
      --default-gateway-v6 ip                 Container default gateway IPv6 address
      --default-ipc-mode string               Default mode for containers ipc ("shareable" | "private") (default "private")
      --default-runtime string                Default OCI runtime for containers (default "runc")
      --default-shm-size bytes                Default shm size for containers (default 64MiB)
      --default-ulimit ulimit                 Default ulimits for containers (default [])
      --dns list                              DNS server to use
      --dns-opt list                          DNS options to use
      --dns-search list                       DNS search domains to use
      --exec-opt list                         Runtime execution options
      --exec-root string                      Root directory for execution state files (default "/var/run/docker")
      --experimental                          Enable experimental features
      --fixed-cidr string                     IPv4 subnet for fixed IPs
      --fixed-cidr-v6 string                  IPv6 subnet for fixed IPs
  -G, --group string                          Group for the unix socket (default "docker")
      --help                                  Print usage
  -H, --host list                             Daemon socket(s) to connect to
      --host-gateway-ip ip                    IP address that the special 'host-gateway' string in --add-host resolves to.
                                              Defaults to the IP address of the default bridge
      --icc                                   Enable inter-container communication (default true)
      --init                                  Run an init in the container to forward signals and reap processes
      --init-path string                      Path to the docker-init binary
      --insecure-registry list                Enable insecure registry communication
      --ip ip                                 Default IP when binding container ports (default 0.0.0.0)
      --ip-forward                            Enable net.ipv4.ip_forward (default true)
      --ip-masq                               Enable IP masquerading (default true)
      --iptables                              Enable addition of iptables rules (default true)
      --ip6tables                             Enable addition of ip6tables rules (default false)
      --ipv6                                  Enable IPv6 networking
      --label list                            Set key=value labels to the daemon
      --live-restore                          Enable live restore of docker when containers are still running
      --log-driver string                     Default driver for container logs (default "json-file")
  -l, --log-level string                      Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
      --log-opt map                           Default log driver options for containers (default map[])
      --max-concurrent-downloads int          Set the max concurrent downloads (default 3)
      --max-concurrent-uploads int            Set the max concurrent uploads (default 5)
      --max-download-attempts int             Set the max download attempts for each pull (default 5)
      --metrics-addr string                   Set default address and port to serve the metrics api on
      --mtu int                               Set the containers network MTU
      --network-control-plane-mtu int         Network Control plane MTU (default 1500)
      --no-new-privileges                     Set no-new-privileges by default for new containers
      --node-generic-resource list            Advertise user-defined resource
      --oom-score-adjust int                  Set the oom_score_adj for the daemon (default -500)
  -p, --pidfile string                        Path to use for daemon PID file (default "/var/run/docker.pid")
      --raw-logs                              Full timestamps without ANSI coloring
      --registry-mirror list                  Preferred Docker registry mirror
      --rootless                              Enable rootless mode; typically used with RootlessKit
      --seccomp-profile string                Path to seccomp profile
      --selinux-enabled                       Enable selinux support
      --shutdown-timeout int                  Set the default shutdown timeout (default 15)
  -s, --storage-driver string                 Storage driver to use
      --storage-opt list                      Storage driver options
      --swarm-default-advertise-addr string   Set default address or interface for swarm advertised address
      --tls                                   Use TLS; implied by --tlsverify
      --tlscacert string                      Trust certs signed only by this CA (default "~/.docker/ca.pem")
      --tlscert string                        Path to TLS certificate file (default "~/.docker/cert.pem")
      --tlskey string                         Path to TLS key file (default "~/.docker/key.pem")
      --tlsverify                             Use TLS and verify the remote
      --userland-proxy                        Use userland proxy for loopback traffic (default true)
      --userland-proxy-path string            Path to the userland proxy binary
      --userns-remap string                   User/Group setting for user namespaces
  -v, --version                               Print version information and quit

Опции с [] могут быть указаны несколько раз.

Описание

dockerd — это постоянный процесс, управляющий контейнерами. Docker использует разные двоичные файлы для демона и клиента. Чтобы запускает демон, входит dockerd.

Чтобы запускает демон с выводом отладки, используйте dockerd --debug или добавляет "debug": true в файл daemon.json.

Включение экспериментальных функций

Включает экспериментальные функции, запустив dockerd с флагом --experimental или добавив "experimental": true в файл daemon.json.

Переменные среды

Для удобства следующий список переменных среды поддерживается командной строкой dockerd:

  • DOCKER_DRIVER Графический драйвер для использования.

  • DOCKER_NOWARN_KERNEL_VERSION Запрещает предупреждения о том, что ваше ядро Linux не подходит для Docker.

  • DOCKER_RAMDISK Если установлено, это отключит «pivot_root».

  • DOCKER_TMPDIR Расположение временных файлов Docker.

  • MOBY_DISABLE_PIGZ Не используйте распаковывает для параллельной распаковки слоев при извлечении образов, даже если он установлен.

Примеры

Опция сокета демона

Демон Docker может прослушивать запросы API движка Docker через сокеты трёх разных типов: unix, tcp и fd.

По умолчанию сокет домена unix (или сокет IPC) создаётся по адресу /var/run/docker.sock, для чего требуется либо разрешение root, либо членство в группе docker.

Если вам нужен удаленный доступ к демону Docker, вам нужно включить сокет tcp. Помните, что настройка по умолчанию обеспечивает незашифрованный и неаутентифицированный прямой доступ к демону Docker и должна быть защищена либо с помощью встроенный зашифрованный сокет HTTPS, либо с помощью защищенного веб-прокси перед ним. Вы можете прослушивать порт 2375 на всех сетевых интерфейсах с -H tcp://0.0.0.0:2375 или на конкретном сетевом интерфейсе, используя его IP-адрес: -H tcp://192.168.59.103:2375. Обычно используется порт 2375 для незашифрованной связи и порт 2376 для зашифрованной связи с демоном.

Примечание

Если вы используете зашифрованный сокет HTTPS, имейте в виду, что поддерживается только TLS1.0 и выше. Протоколы SSLv3 и далее больше не поддерживаются по соображениям безопасности.

В системах на основе Systemd вы можете общаться с демоном через Активация системного сокета, используйте dockerd -H fd://. Использование fd:// идеально подходит для большинства настроек, но вы также можете указывает отдельные сокеты: dockerd -H fd://3 . Если указанные файлы, активированные сокетом, не найдены, Docker завершит работу. Вы можете найти примеры использования активации сокета Systemd с помощью Docker и Systemd в Исходное дерево Docker.

Вы можете настроить демон Docker для одновременного прослушивания нескольких сокетов, используя несколько параметров -H:

В приведённом далее примере демон прослушивает сокет unix по умолчанию и два определённых IP-адреса на этом хосте:

$ sudo dockerd -H unix:///var/run/docker.sock -H tcp://192.168.59.106 -H tcp://10.10.10.2

Клиент Docker будет учитывать переменную среды DOCKER_HOST, чтобы установить флаг -H для клиента. Используйте одну из следующих команд:

$ docker -H tcp://0.0.0.0:2375 ps
$ export DOCKER_HOST="tcp://0.0.0.0:2375"

$ docker ps

Установка для переменной среды DOCKER_TLS_VERIFY любого значения, кроме пустой строки, эквивалентна установке флага --tlsverify. Следующие эквивалентны:

$ docker --tlsverify ps
# or
$ export DOCKER_TLS_VERIFY=1
$ docker ps

Клиент Docker будет учитывать переменные среды HTTP_PROXY , HTTPS_PROXY и NO_PROXY (или их версии в нижнем регистре). HTTPS_PROXY имеет приоритет над HTTP_PROXY.

Клиент Docker поддерживает подключение к удаленному демону через SSH:

$ docker -H ssh://[email protected]:22 ps
$ docker -H ssh://[email protected] ps
$ docker -H ssh://example.com ps

Чтобы использовать SSH-соединение, вам необходимо настроить ssh, чтобы он мог подключаться к удаленному хосту с аутентификацией с открытым ключом. Аутентификация по паролю не поддерживается. Если ваш ключ защищен парольной фразой, вам необходимо настроить ssh- agent.

Привязка Docker к другому хосту/порту или сокету Unix

Предупреждение

Изменение привязки демона docker по умолчанию к TCP-порту или группе пользователей Unix docker повысит риски безопасности, позволяя пользователям без полномочий root получает root доступ к хосту. Убедиться, что вы контролируете доступ к docker. Если вы привязываетесь к порту TCP, любой, у кого есть доступ к этому порту, имеет полный доступ к Docker; поэтому не рекомендуется в открытой сети.

С помощью -H можно заставить демон Docker прослушивать определённый IP-адрес и порт. По умолчанию он будет прослушивать unix:///var/run/docker.sock, чтобы разрешить только локальные подключения пользователю root. Вы могли установить его на 0.0.0.0:2375 или конкретный IP-адрес хоста, чтобы предоставить доступ всем, но это не рекомендуется, потому что тогда для кого-то будет тривиально получает root-доступ к хосту, на котором работает демон.

Точно так же клиент Docker может использовать -H для подключения к пользовательскому порту. Клиент Docker по умолчанию будет подключаться к unix:///var/run/docker.sock в Linux и tcp://127.0.0.1:2376 в Windows.

-H принимает назначение хоста и порта в следующем формате:

tcp://[host]:[port][path] or unix://path

Например:

  • tcp:// -> TCP-соединение с 127.0.0.1 либо через порт 2376, когда включено шифрование TLS, либо через порт 2375, когда связь осуществляется в виде обычного текста.

  • tcp://host:2375 -> TCP-соединение на хосте: 2375

  • tcp://host:2375/path -> TCP-соединение на хосте: 2375 и добавляет путь ко всем запросам

  • unix://path/to/socket -> сокет Unix, расположенный по адресу path/to/socket

-H , если он пуст, по умолчанию будет иметь то же значение, что и при отсутствии -H.

-H также принимает короткую форму для привязок TCP: host: или host:port или :port

Запускает Docker в режиме демона:

$ sudo <path to>/dockerd -H 0.0.0.0:5555 &

Загружает образ ubuntu:

$ docker -H :5555 pull ubuntu

Вы можете использовать несколько -H , например, если хотите прослушивать как TCP, так и сокет Unix

$ sudo dockerd -H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock &
# Download an ubuntu image, use default Unix socket
$ docker pull ubuntu
# OR use the TCP port
$ docker -H tcp://127.0.0.1:2375 pull ubuntu

Драйвер хранилища демона

В Linux демон Docker поддерживает несколько различных драйверов хранилища уровня образа: aufs, devicemapper, btrfs, zfs, overlay, overlay2 и fuse-overlayfs.

Драйвер aufs является самым старым, но он основан на множестве исправлений ядра Linux, который вряд ли будет объединен с основным ядром. Также известно, что они вызывают серьезные сбои ядра. Однако aufs позволяет контейнерам совместно использовать память исполняемых файлов и общих библиотек, поэтому это полезный выбор при запуске тысяч контейнеров с одной и той же программой или библиотеками.

Драйвер devicemapper использует моментальные снимки «тонкой» подготовки и копирования при записи (CoW). Для каждого местоположения графа картографа устройств — обычно /var/lib/docker/devicemapper — создаётся тонкий пул на основе двух блочных устройств, одно для данных и одно для метаданных. По умолчанию данные блочные устройства создаются автоматически с помощью петлевого подключения автоматически созданных разреженных файлов. Обратитесь к параметрам Devicemapper далее, чтобы узнать, как настроить эту настройку. ~jpetazzo/Изменение размера контейнеров Docker с помощью подключаемого модуля Device Mapper объясняется, как настроить существующую настройку без использование опционов.

Драйвер btrfs очень быстр для docker build, но, как и devicemapper, не разделяет исполняемую память между устройствами. Используйте dockerd --storage-driver btrfs --data-root/mnt/btrfs_partition .

Драйвер zfs, вероятно, не так быстр, как btrfs, но имеет более длительный послужной список стабильности. Благодаря Single Copy ARC общие блоки между клонами будут кэшироваться только один раз. Используйте dockerd -s zfs. Чтобы выбрать другую файловую систему zfs, устанавливает параметр zfs.fsname, как приведено в параметрах ZFS.

overlay — это очень быстрая объединенная файловая система. Теперь он объединен с основным ядром Linux с версии 3.18.0 . overlay также поддерживает совместное использование кэша страниц, это означает, что несколько контейнеров, обращающихся к одному и тому же файлу, могут совместно использовать одну запись (или записи) кэша страниц, что делает overlay столь же эффективным с памятью, как и драйвер aufs. Вызовите по номеру dockerd -s overlay, чтобы использовать его.

overlay2 использует ту же файловую систему fast union, но использует преимущества дополнительные возможности, добавленные в ядро Linux 4.0, чтобы избежать чрезмерного использования inode. Вызовите по телефону dockerd -s overlay2, чтобы использовать его.

Примечание

Драйвер хранилища overlay может привести к чрезмерному потреблению инодов (особенно при увеличении количества образов). Вместо этого мы рекомендуем использовать драйвер хранилища overlay2.

Примечание

И overlay, и overlay2 в настоящее время не поддерживаются в btrfs или любой файловой системе копирования при записи и должны использоваться только в разделах ext4.

Драйвер fuse-overlayfs похож на overlay2, но работает в пространстве пользователя. Ожидается, что драйвер fuse-overlayfs будет использоваться для Безрутовый режим.

В Windows демон Docker поддерживает драйвер хранилища с одним уровнем образа в зависимости от платформы образа: windowsfilter для образов Windows и lcow для контейнеров Linux в Windows.

Параметры для каждого драйвера хранилища

Конкретный драйвер хранилища можно настроить с помощью параметров, указанных с помощью флагов --storage-opt. Опции для devicemapper имеют префикс dm , опции для zfs начинаются с zfs , опции для btrfs начинаются с btrfs и опции для lcow начинаются с lcow .

Параметры картографа устройств

Это пример файла конфигурации для devicemapper в Linux:

{
  "storage-driver": "devicemapper",
  "storage-opts": [
    "dm.thinpooldev=/dev/mapper/thin-pool",
    "dm.use_deferred_deletion=true",
    "dm.use_deferred_removal=true"
  ]
}

dm.thinpooldev

Указывает пользовательское блочное устройство хранения, которое будет использоваться для тонкого пула.

При использовании блочного устройства в качестве хранилища устройства сопоставления лучше всего использовать lvm для создания и управления томом тонкого пула. Затем данный том передаётся Docker для создания исключительно томов моментальных снимков, необходимых для образов и контейнеров.

Управление тонким пулом за пределами Engine обеспечивает наиболее многофункциональный метод, когда Docker использует тонкую подготовку сопоставления устройств в качестве резервного хранилища для контейнеров Docker. Основные моменты функции управления тонким пулом на основе lvm включают в себя: автоматическую или интерактивную поддержку изменения размера тонкого пула, динамическое изменение функций тонкого пула, автоматическую проверку метаданных thinp, когда lvm активирует тонкий пул, и т. д.

В качестве запасного варианта, если тонкий пул не предоставляется, создаются файлы обратной связи. Loopback работает очень медленно, но его можно использовать без какой-либо предварительной настройки хранилища. Настоятельно рекомендуется не использовать loopback в рабочей среде. Убедиться, что ваш демон Engine имеет аргумент --storage-opt dm.thinpooldev.

Пример:

$ sudo dockerd --storage-opt dm.thinpooldev=/dev/mapper/thin-pool

dm.directlvm_device

В качестве альтернативы тонкому пулу, как указано выше, Docker может настроить для вас блочное устройство.

Пример:

$ sudo dockerd --storage-opt dm.directlvm_device=/dev/xvdf

dm.thinp_percent

Устанавливает процент переданного блочного устройства для использования в качестве хранилища.

Пример:

$ sudo dockerd --storage-opt dm.thinp_percent=95

dm.thinp_metapercent

Устанавливает процент переданного блочного устройства для использования для хранения метаданных.

Пример:

$ sudo dockerd --storage-opt dm.thinp_metapercent=1

dm.thinp_autoextend_threshold

Устанавливает значение процента пространства, используемого до того, как lvm попытается автоматически расширить доступное пространство [100 = отключено]

Пример:

$ sudo dockerd --storage-opt dm.thinp_autoextend_threshold=80

dm.thinp_autoextend_percent

Устанавливает значение в процентах для увеличения тонкого пула, когда lvm пытается автоматически расширить доступное пространство [100 = отключено]

Пример:

$ sudo dockerd --storage-opt dm.thinp_autoextend_percent=20

dm.basesize

Указывает размер, используемый при создании базового устройства, которое ограничивает размер образов и контейнеров. Значение по умолчанию — 10G. Обратите внимание, что тонкие устройства по своей природе являются «разреженными», поэтому устройство 10G, которое в основном пусто, не использует 10 ГБ пространства в пуле. Однако файловая система будет использовать больше места для пустого корпуса, чем больше устройство.

Размер базового устройства можно увеличить при перезапуске демона, что позволит всем будущим образам и контейнерам (на основе данных новых образов) иметь новый размер базового устройства.

Примеры

$ sudo dockerd --storage-opt dm.basesize=50G

Это увеличит размер базового устройства до 50G. Демон Docker выдаст ошибку, если размер существующего базового устройства превышает 50G. Пользователь может использовать эту опцию для увеличения размера базового устройства, однако уменьшение не разрешено.

Это значение влияет на общесистемную «базовую» пустую файловую систему, которая может быть уже инициализирована и унаследована извлеченными образами. Как правило, для вступления в силу изменения этого значения требуются дополнительные действия:

$ sudo service docker stop

$ sudo rm -rf /var/lib/docker

$ sudo service docker start

dm.loopdatasize

Примечание

Данный параметр настраивает петлю devicemapper, которую не следует использовать в рабочей среде.

Указывает размер, который следует использовать при создании файла замыкания на себя для устройства «данных», которое используется для тонкого пула. Размер по умолчанию 100G. Файл разреженный, поэтому изначально он не будет занимать столько места.

Пример

$ sudo dockerd --storage-opt dm.loopdatasize=200G

  dm.loopmetadatasize

Примечание

Данный параметр настраивает петлю devicemapper, которую не следует использовать в рабочей среде.

Указывает размер, который следует использовать при создании файла замыкания на себя для устройства «метаданных», которое используется для тонкого пула. Размер по умолчанию — 2G. Файл разреженный, поэтому изначально он не будет занимать столько места.

Пример

$ sudo dockerd --storage-opt dm.loopmetadatasize=4G

  dm.fs

Указывает тип файловой системы для использования на базовом устройстве. Поддерживаемые параметры: «ext4» и «xfs». По умолчанию «xfs»

Пример

$ sudo dockerd --storage-opt dm.fs=ext4

  dm.mkfsarg

Задаёт дополнительные аргументы mkfs, которые будут использоваться при создании базового устройства.

Пример

$ sudo dockerd --storage-opt "dm.mkfsarg=-O ^has_journal"

  dm.mountopt

Указывает дополнительные параметры монтирования, используемые при монтировании тонких устройств.

Пример

$ sudo dockerd --storage-opt dm.mountopt=nodiscard

dm.datadev

(Устарело, используйте dm.thinpooldev )

Указывает пользовательское блочное устройство, которое будет использоваться для данных для тонкого пула.

При использовании блочного устройства для хранения преобразователя устройств в идеале следует указывает datadev и metadatadev, чтобы полностью избежать использования устройства обратной связи.

Пример

$ sudo dockerd \
      --storage-opt dm.datadev=/dev/sdb1 \
      --storage-opt dm.metadatadev=/dev/sdc1

dm.metadatadev

(Устарело, используйте dm.thinpooldev )

Указывает пользовательское блочное устройство, которое будет использоваться для метаданных тонкого пула.

Для лучшей производительности метаданные должны быть на другом шпинделе, чем данные, или даже лучше на SSD.

При настройке нового пула метаданных он должен быть действительным. Этого можно добиться, обнулив первые 4 КБ, чтобы обозначить пустые метаданные, как здесь:

$ dd if=/dev/zero of=$metadata_dev bs=4096 count=1

Пример

$ sudo dockerd \
      --storage-opt dm.datadev=/dev/sdb1 \
      --storage-opt dm.metadatadev=/dev/sdc1

dm.blocksize

Указывает настраиваемый размер блока для тонкого пула. Размер блока по умолчанию — 64 КБ.

Пример

$ sudo dockerd --storage-opt dm.blocksize=512K

dm.blkdiscard

Включает или отключает использование blkdiscard при удалении устройств сопоставления устройств. Это включено по умолчанию (только) при использовании устройств обратной связи и требуется для повторной обработки файла обратной связи при удалении образа/контейнера.

Отключение этого при замыкании на себя может привести к намного более быстрому удалению контейнеров, но при этом пространство, используемое в каталоге /var/lib/docker, не будет возвращено системе для другого использования при удалении контейнеров.

Примеры

$ sudo dockerd --storage-opt dm.blkdiscard=false

dm.override_udev_sync_check

Переопределяет проверки синхронизации udev между devicemapper и udev . udev — это диспетчер устройств для ядра Linux.

Чтобы просмотреть поддержку синхронизации udev демона Docker, использующего драйвер devicemapper, запускает:

$ docker info
<...>
Udev Sync Supported: true
<...>

Когда поддержка синхронизации udev имеет значение true , тогда devicemapper и udev могут координировать активацию и деактивацию устройств для контейнеров.

Когда udev поддерживает синхронизацию false , вызывается состояние гонки между devicemapper и udev во время создания и очистки. Состояние гонки приводит к ошибкам и сбоям. (Информацию об данных сбоях см. в docker#4036)

Чтобы разрешить запуск демона docker, независимо от того, что синхронизация udev не поддерживается, устанавливает для dm.override_udev_sync_check значение true:

$ sudo dockerd --storage-opt dm.override_udev_sync_check=true

Когда это значение равно true , devicemapper продолжает работу и просто предупреждает вас об ошибках.

Примечание

В идеале следует использовать демон docker и среду, которые поддерживают синхронизацию с udev . Для дальнейшего обсуждения этой темы см. docker#4036. В противном случае устанавливает данный флаг для переноса существующих демонов Docker на демон с поддерживаемой средой.

dm.use_deferred_removal

Включает использование отложенного удаления устройства, если libdm и драйвер ядра поддерживают данный механизм.

Отложенное удаление устройства означает, что если устройство занято во время удаления/деактивации устройств, то на устройстве запланировано отложенное удаление. И устройства автоматически исчезают, когда последний пользователь устройства выходит.

Например, когда контейнер выходит, связанное с ним тонкое устройство удаляется. Если это устройство просочилось в какое-то другое пространство имён монтирования и не может быть удалено, выход из контейнера все равно завершается успешно, и данный параметр заставляет систему планировать отложенное удаление устройства. Он не ждет в цикле, пытаясь удаляет занятое устройство.

Пример

$ sudo dockerd --storage-opt dm.use_deferred_removal=true

dm.use_deferred_deletion

Позволяет использовать отложенное удаление устройств для устройств из тонкого пула. По умолчанию удаление устройств тонкого пула выполняется синхронно. Перед удалением контейнера демон Docker удаляет все связанные с ним устройства. Если драйвер хранилища не может удаляет устройство, удаление контейнера завершается ошибкой и демон возвращается.

Error deleting container: Error response from daemon: Cannot destroy container

Чтобы избежать этого сбоя, включает в демоне как отложенное удаление устройства, так и отложенное удаление устройства.

$ sudo dockerd \
      --storage-opt dm.use_deferred_deletion=true \
      --storage-opt dm.use_deferred_removal=true

При включении данных двух параметров, если устройство занято, когда драйвер удаляет контейнер, драйвер помечает устройство как удаленное. Позже, когда устройство не используется, драйвер удаляет его.

В общем, должно быть безопасно включить эту опцию по умолчанию. Это поможет, когда непреднамеренная утечка точки монтирования происходит в нескольких пространствах имён монтирования.

dm.min_free_space

Указывает минимальный процент свободного места в тонком пуле, необходимый для успешного создания нового устройства. Эта проверка применяется как к свободному пространству данных, так и к свободному пространству метаданных. Допустимые значения: от 0% до 99%. Значение 0% отключает логику проверки свободного места. Если пользователь не указывает значение для этой опции, Engine использует значение по умолчанию 10%.

Всякий раз, когда создаётся новое устройство тонкого пула (во время docker pull или во время создания контейнера), Engine проверяет, доступно ли минимальное свободное пространство. Если недостаточно места, создание устройства завершается ошибкой, а любая соответствующая операция docker завершается ошибкой.

Чтобы устранить эту ошибку, необходимо создать больше свободного места в тонком пуле для восстановления после ошибки. Вы можете освободить место, удалив некоторые образы и контейнеры из тонкого пула. Вы также можете добавить дополнительное хранилище в тонкий пул.

Чтобы добавить больше места в тонкий пул LVM (управление логическими томами), просто добавляет больше памяти в тонкий пул контейнера группы томов; это должно автоматически устранять любые ошибки. Если в вашей конфигурации используются циклические устройства, останавливает демон Engine, увеличивает размер файлов циклов и перезапустите демон, чтобы решить проблему.

Пример

$ sudo dockerd --storage-opt dm.min_free_space=10%

dm.xfs_nospace_max_retries

Указывает максимальное количество повторных попыток, которое XFS должна предпринять для завершения ввода-вывода, когда базовое устройство хранения возвращает ошибку ENOSPC (нет места).

По умолчанию XFS бесконечно повторяет попытки для завершения ввода-вывода, и это может привести к неубиваемому процессу. Чтобы изменяет это поведение, можно установить для xfs_nospace_max_retries значение 0, и XFS не будет повторять ввод-вывод после получения ENOSPC и выключит файловую систему.

Пример

$ sudo dockerd --storage-opt dm.xfs_nospace_max_retries=0

dm.libdm_log_level

Указывает максимальный уровень журнала libdm, который будет перенаправлен в журнал dockerd (как указано --log-level). Данный параметр в первую очередь предназначен для отладки проблем, связанных с libdm. Использование значений, отличных от значений по умолчанию, может привести к регистрации ложноположительных предупреждений.

Указанные значения должны находиться в диапазоне допустимых уровней журнала libdm. На момент написания далее приведён список уровней журнала libdm, а также соответствующих им уровней при выводе с помощью dockerd.

Уровень libdm

Значение

--log-level

_LOG_FATAL

2

error

_LOG_ERR

3

error

_LOG_WARN

4

warn

_LOG_NOTICE

5

info

_LOG_INFO

6

info

_LOG_DEBUG

7

debug

Пример

$ sudo dockerd \
      --log-level debug \
      --storage-opt dm.libdm_log_level=7

параметры ZFS

zfs.fsname

Устанавливает файловую систему zfs, в которой Docker будет создавать свои собственные множества данных. По умолчанию Docker выбирает файловую систему zfs, в которой находится Docker Graph ( /var/lib/docker ).

Пример

$ sudo dockerd -s zfs --storage-opt zfs.fsname=zroot/docker

Опции Btrfs

btrfs.min_space

Указывает минимальный размер для использования при создании подтома, используемого для контейнеров. Если пользователь использует дисковую квоту для btrfs при создании или запуске контейнера с опцией –storage-opt size, docker должен убедиться, что size не может быть меньше, чем btrfs.min_space .

Пример

$ sudo dockerd -s btrfs --storage-opt btrfs.min_space=10G

Опции Overlay2

overlay2.size

Устанавливает максимальный размер контейнера по умолчанию. Он поддерживается только в том случае, если резервная файловая система имеет значение xfs и смонтирована с параметром монтирования pquota. В данных условиях пользователь может передать любой размер меньше, чем размер резервной фс.

Пример

$ sudo dockerd -s overlay2 --storage-opt overlay2.size=1G

Параметры фильтра Windows

size

Указывает размер для использования при создании песочницы, которая используется для контейнеров. По умолчанию 20G.

Пример

C:\> dockerd --storage-opt size=40G

Варианты LCOW (контейнеры Linux в Windows)

lcow.globalmode

Указывает, создаёт ли демон экземпляры служебных виртуальных машин по мере необходимости (рекомендуется и используется по умолчанию, если пропущен) или использует одну глобальную служебную виртуальную машину (более высокая производительность, но имеет последствия для безопасности и не рекомендуется для производственных развертываний).

Пример

C:\> dockerd --storage-opt lcow.globalmode=false

lcow.kirdpath

Указывает путь к папке, в которой находится пара файлов ядра и файла initrd, используемых для загрузки служебной виртуальной машины. По умолчанию %ProgramFiles%\Linux Containers.

Пример

C:\> dockerd --storage-opt lcow.kirdpath=c:\path\to\files

lcow.kernel

Задаёт имя файла ядра, расположенного по пути lcow.kirdpath. По умолчанию bootx64.efi.

Пример

C:\> dockerd --storage-opt lcow.kernel=kernel.efi

lcow.initrd

Указывает имя файла initrd, расположенного по пути lcow.kirdpath. По умолчанию initrd.img.

Пример

C:\> dockerd --storage-opt lcow.initrd=myinitrd.img

lcow.bootparameters

Указывает дополнительные параметры загрузки для загрузки служебных виртуальных машин в режиме ядра/initrd. Игнорируется, если служебная виртуальная машина загружается с виртуального жесткого диска. Данные настройки зависят от ядра.

Пример

C:\> dockerd --storage-opt "lcow.bootparameters='option=value'"

lcow.vhdx

Указывает пользовательский VHDX для загрузки служебной виртуальной машины в качестве альтернативы загрузке ядра и initrd. По умолчанию uvm.vhdx в lcow.kirdpath.

Пример

C:\> dockerd --storage-opt lcow.vhdx=custom.vhdx

lcow.timeout

Указывает время ожидания для операций служебной виртуальной машины в секундах. По умолчанию 300.

Пример

C:\> dockerd --storage-opt lcow.timeout=240

lcow.sandboxsize

Указывает размер в ГБ для использования при создании песочницы, используемой для контейнеров. По умолчанию 20. Не может быть меньше 20.

Пример

C:\> dockerd --storage-opt lcow.sandboxsize=40

Параметры выполнения Docker во время выполнения

Демон Docker использует среду выполнения, совместимую с ОКИ (вызываемую через демон containerd), в качестве интерфейса с ядром Linux namespaces, cgroups и SELinux.

По умолчанию демон Docker автоматически запускает containerd. Если вы хотите управлять запуском containerd, вручную запускает containerd и передать путь к сокету containerd, используя флаг --containerd. Например:

$ sudo dockerd --containerd /var/run/dev/docker-containerd.sock

Среды выполнения можно регистрирует в демоне либо через файл конфигурации, либо с помощью аргумента командной строки --add-runtime.

Далее приведён пример добавления двух сред выполнения через конфигурацию:

{
  "default-runtime": "runc",
  "runtimes": {
    "custom": {
      "path": "/usr/local/bin/my-runc-replacement",
      "runtimeArgs": [
        "--debug"
      ]
    },
    "runc": {
      "path": "runc"
    }
  }
}

Это тот же пример через командную строку:

$ sudo dockerd --add-runtime runc=runc --add-runtime custom=/usr/local/bin/my-runc-replacement

Примечание

Определение аргументов времени выполнения через командную строку не поддерживается.

Опции для среды выполнения

Вы можете настроить среду выполнения, используя параметры, указанные с флагом --exec-opt. Все параметры флага имеют префикс native. Доступна одна опция native.cgroupdriver.

Параметр native.cgroupdriver определяет управление контрольными группами контейнера. Вы можете указывает только cgroupfs или systemd . Если указывает systemd, а он недоступен, система выдаст ошибку. Если вы опустите параметр native.cgroupdriver, cgroupfs будет использоваться на хостах cgroup v1, systemd будет использоваться на хостах cgroup v2 с доступным systemd.

В этом примере для cgroupdriver задается значение systemd :

$ sudo dockerd --exec-opt native.cgroupdriver=systemd

Установка этого параметра применяется ко всем контейнерам, запускаемым демоном.

Также контейнер Windows использует --exec-opt для специальных целей. Например, с помощью этого пользователь Docker может указывает технологию изоляции контейнера по умолчанию:

> dockerd --exec-opt isolation=hyperv

Сделает hyperv технологией изоляции по умолчанию в Windows. Если при запуске демона не указано значение изоляции, на клиенте Windows значение по умолчанию — hyperv, а на сервере Windows — process.

Параметры демона DNS

Чтобы установить DNS-сервер для всех контейнеров Docker, используйте:

$ sudo dockerd --dns 8.8.8.8

Чтобы установить домен поиска DNS для всех контейнеров Docker, используйте:

$ sudo dockerd --dns-search example.com

Разрешить отправку нераспространяемых артефактов

Некоторые образы (например, базовые образы Windows) содержат артефакты, распространение которых ограничено лицензией. Когда данные образы помещаются в реестр, ограниченные артефакты не включаются.

Чтобы переопределить это поведение для определённых реестров, используйте параметр --allow- nondistributable-artifacts в одной из следующих форм:

  • --allow-nondistributable-artifacts myregistry:5000 сообщает демону Docker о том, что нераспространяемые артефакты следует отправить в myregistry:5000.

  • --allow-nondistributable-artifacts 10.1.0.0/16 указывает демону Docker отправлять нераспространяемые артефакты во все реестры, чей разрешенный IP-адрес находится в подсети, описанной синтаксисом CIDR.

Эту опцию можно использовать несколько раз.

Данный параметр полезен при отправке образов, содержащих нераспространяемые артефакты, в реестр в изолированной сети, чтобы хосты в этой сети могли извлекать образы без подключения к другому серверу.

Предупреждение

Нераспространяемые артефакты обычно имеют ограничения на то, как и где их можно распространять и совместно использовать. Используйте эту функцию только для передачи артефактов в частные реестры и убедиться, что вы соблюдаете все условия, касающиеся повторного распространения нераспространяемых артефактов.

Небезопасные реестры

Docker считает частный реестр либо безопасным, либо небезопасным. В остальной части этого раздела registry используется для частного реестра , а myregistry:5000 является примером-заполнителем для частного реестра.

Защищенный реестр использует TLS, и копия его сертификата CA размещается на хосте Docker по адресу /etc/docker/certs.d/myregistry:5000/ca.crt. Незащищенный реестр либо не использует TLS (т. е. прослушивает обычный текст HTTP), либо использует TLS с сертификатом CA, неизвестным демону Docker. Последнее может произойти, если сертификат не был найден под /etc/docker/certs.d/myregistry:5000/ или если проверка сертификата не удалась (т. е. неправильный CA).

По умолчанию Docker предполагает все, но локальные (см. далее локальные реестры) реестры безопасны. Связь с незащищенным реестром невозможна, если Docker предполагает, что реестр является безопасным. Для связи с незащищенным реестром демону Docker требуется --insecure-registry в одной из следующих двух форм:

  • --insecure-registry myregistry:5000 сообщает демону Docker, что myregistry:5000 следует считать небезопасным.

  • --insecure-registry 10.1.0.0/16 сообщает демону Docker, что все реестры, чей домен разрешается в IP-адрес, является частью подсети, описываемой синтаксисом CIDR, следует считать небезопасными.

Флаг можно использовать несколько раз, чтобы позволить пометить несколько реестров как небезопасные.

Если небезопасный реестр не помечен как небезопасный, docker pull , docker push и docker search приведут к сообщению об ошибке, предлагающему пользователю либо защитить, либо передать флаг --insecure-registry демону Docker, как приведено выше.

Локальные реестры, чей IP-адрес попадает в диапазон 127.0.0.0/8, автоматически помечаются как небезопасные, начиная с Docker 1.3.2. Не рекомендуется полагаться на это, т. к. в будущем это может измениться.

Включение --insecure-registry , т. е. разрешение незашифрованной и/или ненадежной связи, может быть полезно при работе с локальным реестром. Однако, поскольку его использование создаёт уязвимости в системе безопасности, его следует включать ТОЛЬКО в целях тестирования. Для повышения безопасности пользователям следует добавить свой CA в список доверенных ЦС своей системы вместо включения --insecure-registry.

Устаревшие реестры

Операции с реестрами, поддерживающими только устаревший протокол v1, больше не поддерживаются. В частности, демон не будет пытаться использовать push , pull и login для реестров v1. Исключением является search, который по-прежнему может выполняться в реестрах версии 1.

Запуск демона Docker за HTTPS_PROXY

При работе внутри локальной сети, использующей прокси-сервер HTTPS, сертификаты Docker Hub будут заменены сертификатами прокси-сервера. Данные сертификаты необходимо добавить в конфигурацию вашего хоста Docker:

  1. Устанавливает пакет ca-certificates для вашего дистрибутива

  2. Попросите у администратора сети сертификат CA прокси-сервера и добавляет их к /etc/pki/tls/certs/ca-bundle.crt

  3. Затем запускает демон Docker с HTTPS_PROXY=http://username:password@proxy:port/ dockerd. username: и password@ являются необязательными и нужны только в том случае, если ваш прокси-сервер требует аутентификации.

Это только добавит прокси и аутентификацию к запросам демона Docker — вашим docker build и запущенным контейнерам потребуется дополнительная настройка для использования прокси

По умолчанию

--default-ulimit позволяет установить параметры ulimit по умолчанию для использования во всех контейнерах. Он принимает те же параметры, что и --ulimit для docker run. Если данные значения по умолчанию не установлены, настройки ulimit будут унаследованы от демона Docker, если они не установлены в docker run. Любые параметры --ulimit, переданные в docker run, перезапишут данные значения по умолчанию.

Будьте осторожны, устанавливая nproc с флагом ulimit, поскольку nproc разработан Linux для установки максимального количества процессов, доступных пользователю, а не контейнеру. Для получения подробной информации см. справочник по run.

Обнаружение узла

Параметр --cluster-advertise указывает комбинацию host:port или interface:port, которую данный конкретный экземпляр демона должен использовать при объявлении себя кластеру. Через это значение демон доступен удаленным хостам. Если вы указываете интерфейс, убедиться, что он включает IP-адрес фактического хоста Docker. Для установки Engine, созданной с помощью docker-machine, обычно используется интерфейс eth1.

Демон использует libkv для объявления узла в кластере. Некоторые механизмы ключ-значение поддерживают взаимный TLS. Для настройки клиента параметры TLS, используемые демоном, можно настроить с помощью флага --cluster-store-opt, указав пути к файлам в кодировке PEM. Например:

$ sudo dockerd \
    --cluster-advertise 192.168.1.2:2376 \
    --cluster-store etcd://192.168.1.2:2379 \
    --cluster-store-opt kv.cacertfile=/path/to/ca.pem \
    --cluster-store-opt kv.certfile=/path/to/cert.pem \
    --cluster-store-opt kv.keyfile=/path/to/key.pem

В настоящее время поддерживаются следующие параметры хранилища кластера:

Опция

Описание

discovery.heartbeat

Указывает таймер пульса в секундах, который используется демоном в качестве механизма keepalive, чтобы убедиться, что модуль обнаружения рассматривает узел как активный в кластере. Если не настроено, значение по умолчанию — 20 секунд.

discovery.ttl

Указывает TTL (время жизни) в секундах, которое используется модулем обнаружения для тайм-аута узла, если действительный пульс не получен в течение настроенного значения ttl. Если не настроено, значение по умолчанию — 60 секунд.

kv.cacertfile

Указывает путь к локальному файлу с сертификатами CA в кодировке PEM, которым следует доверять.

kv.certfile

Указывает путь к локальному файлу с сертификатом в формате PEM. Данный сертификат используется в качестве сертификата клиента для связи с хранилищем ключей и значений.

kv.keyfile

Указывает путь к локальному файлу с закрытым ключом в формате PEM. Данный закрытый ключ используется в качестве ключа клиента для связи с хранилищем ключей и значений.

kv.path

Указывает путь в хранилище ключей/значений. Если он не настроен, по умолчанию используется значение «docker/nodes».

Авторизация доступа

Авторизацию доступа Docker можно расширить с помощью подключаемых модулей авторизации, которые ваша организация может приобрести или создать самостоятельно. Вы можете установить один или несколько плагинов авторизации при запуске Docker daemon, используя опцию --authorization-plugin=PLUGIN_ID.

$ sudo dockerd --authorization-plugin=plugin1 --authorization-plugin=plugin2,...

Значение PLUGIN_ID — это либо имя подключаемого модуля, либо путь к файлу его спецификации. Реализация плагина определяет, можете ли вы указывает имя или путь. Проконсультируйтесь с вашим администратором Docker, чтобы получает информацию о доступных вам плагинах.

После установки подключаемого модуля запросы к daemon через командную строку или API-интерфейс Docker Engine разрешаются или запрещаются подключаемым модулем. Если у вас установлено несколько плагинов, каждый плагин по порядку должен разрешать выполнение запроса.

Сведения о том, как создать подключаемый модуль авторизации, см. в разделе плагин авторизации.

Параметры пространства имён пользователя демона

Ядро Linux поддержка пространства имён пользователей обеспечивает дополнительную безопасность, позволяя процессу и, следовательно, контейнеру иметь уникальный диапазон идентификаторов пользователей и групп, выходящий за рамки традиционного диапазона пользователей и групп, используемого хост-системой. Потенциально наиболее важным улучшением безопасности является то, что по умолчанию процессы контейнера, работающие от имени пользователя root, будут иметь ожидаемые административные привилегии (с некоторыми ограничениями) внутри контейнера, но фактически будут сопоставлены с непривилегированным uid на узле.

Дополнительные сведения об использовании этой функции, а также об ограничениях см. в статье Изолируйте контейнеры с пространством имён пользователя.

Разные варианты

IP-маскарад использует преобразовывает адресов, чтобы позволить контейнерам без общедоступного IP-адреса взаимодействовать с другими машинами в Интернете. Это может мешать некоторым сетевым топологиям и может быть отключено с помощью --ip-masq=false .

Docker поддерживает программные ссылки для каталога данных Docker (/var/lib/docker) и для /var/lib/docker/tmp. DOCKER_TMPDIR и каталог данных могут быть установлены следующим образом:

$ DOCKER_TMPDIR=/mnt/disk2/tmp /usr/local/bin/dockerd --data-root /var/lib/docker -H unix:// > /var/lib/docker-machine/docker.log 2>&1

или

$ export DOCKER_TMPDIR=/mnt/disk2/tmp
$ /usr/local/bin/dockerd --data-root /var/lib/docker -H unix:// > /var/lib/docker-machine/docker.log 2>&1

Родительская группа по умолчанию

Опция --cgroup-parent позволяет вам установить родительскую группу cgroup по умолчанию для использования для контейнеров. Если данный параметр не установлен, по умолчанию используется /docker для драйвера fs cgroup и system.slice для драйвера systemd cgroup.

Если контрольная группа имеет ведущую косую черту ( / ), контрольная группа создаётся под корневой контрольной группой, в противном случае контрольная группа создаётся под контрольной группой демона.

Предполагая, что демон работает в cgroup daemoncgroup, --cgroup- parent=/foobar создаёт cgroup в /sys/fs/cgroup/memory/foobar, тогда как использование --cgroup-parent=foobar создаёт cgroup в /sys/fs/cgroup/memory/daemoncgroup/foobar

Драйвер systemd cgroup имеет другие правила для --cgroup-parent. Systemd представляет иерархию по срезам, а имя среза кодирует местоположение в дереве. Таким образом, --cgroup-parent для systemd cgroups должно быть именем слайса. Имя может состоять из последовательности имён, разделенных тире, которая определяет путь к слайсу от корневого слайса. Например, --cgroup-parent=user- a-b.slice означает, что контрольная группа памяти для контейнера создана в /sys/fs/cgroup/memory/user.slice/user-a.slice/user- a-b.slice/docker-<id>.scope.

Данный параметр также можно установить для каждого контейнера с помощью параметра --cgroup-parent в docker create и docker run, и он имеет приоритет над параметром --cgroup-parent в демоне.

Показатели демона

Параметр --metrics-addr принимает адрес TCP для обслуживания API метрик. Данная функция все ещё является экспериментальной, поэтому демон должен работать в экспериментальном режиме, чтобы данная функция работала.

Чтобы обслуживать API метрик на localhost:9323, вы должны указывает --metrics- addr 127.0.0.1:9323 , что позволит вам делать запросы к API на 127.0.0.1:9323/metrics для получения метрик в формате Прометей.

Порт 9323 — это порт по умолчанию, связанный с метриками Docker, чтобы избежать конфликтов с другими экспортерами и сервисами prometheus.

Если вы используете сервер prometheus, вы можете добавить данный адрес в свои конфигурации очистки, чтобы prometheus собирал метрики в Docker. Для получения дополнительной информации о prometheus обратитесь к сайт прометея.

scrape_configs:
  - job_name: 'docker'
    static_configs:
      - targets: ['127.0.0.1:9323']

Обратите внимание, что данная функция по-прежнему помечена как экспериментальная, поскольку метрики и названия метрик могут измениться, пока данная функция все ещё находится в экспериментальном состоянии. Оставьте отзыв о том, что вы хотели бы видеть в API.

Общие ресурсы узла

Параметр --node-generic-resources принимает список пар ключ-значение ( key=value ), который позволяет вам объявлять определённые пользователем ресурсы в кластере swarm.

Текущий ожидаемый опция использования — анонсировать графические процессоры NVIDIA, чтобы сервисы, запрашивающие NVIDIA-GPU=[0-16], могли приземлиться на узле, имеющем достаточное количество графических процессоров для выполнения задачи.

Пример использования:

{
  "node-generic-resources": [
    "NVIDIA-GPU=UUID1",
    "NVIDIA-GPU=UUID2"
  ]
}

Конфигурационный файл демона

Параметр --config-file позволяет вам установить любой параметр конфигурации для демона в формате JSON. В этом файле используются те же имена флагов, что и в ключах, за исключением флагов, допускающих несколько записей, где используется множественное число имени флага, например, labels для флага label.

Параметры, установленные в файле конфигурации, не должны конфликтовать с параметрами, установленными с помощью флагов. Демон docker не запускается, если параметр дублируется между файлом и флагами, независимо от их значения. Мы делаем это, чтобы избежать молчаливого игнорирования изменений, внесенных при перезагрузке конфигурации. Например, демон не запустится, если вы устанавливает метки демона в файле конфигурации, а также устанавливает метки демона с помощью флага --label. Параметры, отсутствующие в файле, игнорируются при запуске демона.

В Linux

Расположение файла конфигурации по умолчанию в Linux — /etc/docker/daemon.json. Флаг --config-file можно использовать для указания расположения не по умолчанию.

Это полный пример разрешенных параметров конфигурации в Linux:

{
  "allow-nondistributable-artifacts": [],
  "api-cors-header": "",
  "authorization-plugins": [],
  "bip": "",
  "bridge": "",
  "cgroup-parent": "",
  "cluster-advertise": "",
  "cluster-store": "",
  "cluster-store-opts": {},
  "containerd": "/run/containerd/containerd.sock",
  "containerd-namespace": "docker",
  "containerd-plugin-namespace": "docker-plugins",
  "data-root": "",
  "debug": true,
  "default-address-pools": [
    {
      "base": "172.30.0.0/16",
      "size": 24
    },
    {
      "base": "172.31.0.0/16",
      "size": 24
    }
  ],
  "default-cgroupns-mode": "private",
  "default-gateway": "",
  "default-gateway-v6": "",
  "default-runtime": "runc",
  "default-shm-size": "64M",
  "default-ulimits": {
    "nofile": {
      "Hard": 64000,
      "Name": "nofile",
      "Soft": 64000
    }
  },
  "dns": [],
  "dns-opts": [],
  "dns-search": [],
  "exec-opts": [],
  "exec-root": "",
  "experimental": false,
  "features": {},
  "fixed-cidr": "",
  "fixed-cidr-v6": "",
  "group": "",
  "hosts": [],
  "icc": false,
  "init": false,
  "init-path": "/usr/libexec/docker-init",
  "insecure-registries": [],
  "ip": "0.0.0.0",
  "ip-forward": false,
  "ip-masq": false,
  "iptables": false,
  "ip6tables": false,
  "ipv6": false,
  "labels": [],
  "live-restore": true,
  "log-driver": "json-file",
  "log-level": "",
  "log-opts": {
    "cache-disabled": "false",
    "cache-max-file": "5",
    "cache-max-size": "20m",
    "cache-compress": "true",
    "env": "os,customer",
    "labels": "somelabel",
    "max-file": "5",
    "max-size": "10m"
  },
  "max-concurrent-downloads": 3,
  "max-concurrent-uploads": 5,
  "max-download-attempts": 5,
  "mtu": 0,
  "no-new-privileges": false,
  "node-generic-resources": [
    "NVIDIA-GPU=UUID1",
    "NVIDIA-GPU=UUID2"
  ],
  "oom-score-adjust": -500,
  "pidfile": "",
  "raw-logs": false,
  "registry-mirrors": [],
  "runtimes": {
    "cc-runtime": {
      "path": "/usr/bin/cc-runtime"
    },
    "custom": {
      "path": "/usr/local/bin/my-runc-replacement",
      "runtimeArgs": [
        "--debug"
      ]
    }
  },
  "seccomp-profile": "",
  "selinux-enabled": false,
  "shutdown-timeout": 15,
  "storage-driver": "",
  "storage-opts": [],
  "swarm-default-advertise-addr": "",
  "tls": true,
  "tlscacert": "",
  "tlscert": "",
  "tlskey": "",
  "tlsverify": true,
  "userland-proxy": false,
  "userland-proxy-path": "/usr/libexec/docker-proxy",
  "userns-remap": ""
}

Примечание

Вы не можете установить параметры в daemon.json, которые уже были установлены при запуске демона в качестве флага. В системах, которые используют systemd для запуска демона Docker, -H уже установлен, поэтому вы не можете использовать ключ hosts в daemon.json для добавления адресов прослушивания. См. «настраиваемые параметры демона Docker», чтобы узнать, как выполняет эту задачу с помощью подключаемого файла systemd.

В Windows

Расположение файла конфигурации по умолчанию в Windows — %programdata%\docker\config\daemon.json. Флаг --config-file можно использовать для указания расположения не по умолчанию.

Это полный пример разрешенных параметров конфигурации в Windows:

{
  "allow-nondistributable-artifacts": [],
  "authorization-plugins": [],
  "bridge": "",
  "cluster-advertise": "",
  "cluster-store": "",
  "containerd": "\\\\.\\pipe\\containerd-containerd",
  "containerd-namespace": "docker",
  "containerd-plugin-namespace": "docker-plugins",
  "data-root": "",
  "debug": true,
  "default-ulimits": {},
  "dns": [],
  "dns-opts": [],
  "dns-search": [],
  "exec-opts": [],
  "experimental": false,
  "features": {},
  "fixed-cidr": "",
  "group": "",
  "hosts": [],
  "insecure-registries": [],
  "labels": [],
  "log-driver": "",
  "log-level": "",
  "max-concurrent-downloads": 3,
  "max-concurrent-uploads": 5,
  "max-download-attempts": 5,
  "mtu": 0,
  "pidfile": "",
  "raw-logs": false,
  "registry-mirrors": [],
  "shutdown-timeout": 15,
  "storage-driver": "",
  "storage-opts": [],
  "swarm-default-advertise-addr": "",
  "tlscacert": "",
  "tlscert": "",
  "tlskey": "",
  "tlsverify": true
}

Варианты характеристик

Необязательное поле features в daemon.json позволяет пользователям включать или отключать определённые функции демона. Например, {"features":{"buildkit": true}} включает buildkit в качестве построителя образов Docker по умолчанию.

Список поддерживаемых в настоящее время опций функций:

  • buildkit: включает buildkit в качестве сборщика по умолчанию, если установлено значение true, или отключает его с помощью false. Обратите внимание, что если данный параметр не задан явно в файле конфигурации демона, то cli должен определить, какой сборщик вызывать.

Поведение при перезагрузке конфигурации

Некоторые параметры можно перенастроить во время работы демона, не требуя перезапуска процесса. Мы используем сигнал SIGHUP в Linux для перезагрузки и глобальное событие в Windows с ключом Global\docker-daemon-config-$PID. Параметры можно изменяет в файле конфигурации, но они все равно будут проверять наличие конфликтов с предоставленными флагами. Демону не удается перенастроить себя в случае конфликтов, но он не остановит выполнение.

Список поддерживаемых в настоящее время опций, которые можно перенастроить, таков:

  • debug: переводит демон в режим отладки, если установлено значение true.

  • cluster-store: он перезагружает хранилище обнаружения с новым адресом.

  • cluster-store-opts: он использует новые параметры для перезагрузки хранилища обнаружения.

  • cluster-advertise: изменяет рекламируемый адрес после перезагрузки.

  • labels: он заменяет метки демона новым набором меток.

  • live-restore: включает поддержание работоспособности контейнеров во время простоя демона.

  • max-concurrent-downloads: обновляет максимальное количество одновременных загрузок для каждого извлечения.

  • max-concurrent-uploads: обновляет максимальное количество одновременных загрузок для каждого нажатия.

  • max-download-attempts: обновляет максимальное количество попыток загрузки для каждого извлечения.

  • default-runtime: обновляет среду выполнения, которая будет использоваться, если не указано при создании контейнера. По умолчанию используется значение «по умолчанию», которое является средой выполнения, поставляемой с официальными пакетами докеров.

  • runtimes: обновляет список доступных сред выполнения OCI, которые можно использовать для запуска контейнеров.

  • authorization-plugin: указывает используемые плагины авторизации.

  • allow-nondistributable-artifacts: Заменяет множество реестров, в которые демон будет отправлять нераспространяемые артефакты, новым набором реестров.

  • insecure-registries: он заменяет небезопасные реестры демона новым набором небезопасных реестров. Если некоторые существующие незащищенные реестры в конфигурации демона не находятся в недавно перезагруженных небезопасных реестрах, данные существующие будут удалены из конфигурации демона.

  • registry-mirrors: он заменяет зеркала реестра демона новым набором зеркал реестра. Если некоторые существующие зеркала реестра в конфигурации демона не находятся в недавно перезагруженных зеркалах реестра, данные существующие зеркала будут удалены из конфигурации демона.

  • shutdown-timeout: он заменяет существующий тайм-аут конфигурации демона новым тайм-аутом для закрытия всех контейнеров.

  • features: явно включает или отключает определённые функции.

Обновление и повторная загрузка конфигураций кластера, таких как --cluster-store, --cluster-advertise и --cluster-store-opts, вступит в силу, только если данные конфигурации не были настроены ранее. Если в флагах указан --cluster-store, а cluster-advertise нет, cluster-advertise можно добавить в файл конфигурации без сопровождения --cluster-store. Перезагрузка конфигурации зарегистрирует предупреждающее сообщение, если обнаружит изменение в ранее настроенных конфигурациях кластера.

Запускает несколько демонов

Примечание

Запуск нескольких демонов на одном хосте считается «экспериментальным». Пользователь должен знать о нерешенных проблемах. В некоторых случаях это решение может работать некорректно. В настоящее время решения находятся в стадии разработки и будут доставлены в ближайшее время.

В этом разделе описывается, как запускает несколько демонов Docker на одном хосте. Для запуска нескольких демонов необходимо настроить каждый демон так, чтобы он не конфликтовал с другими демонами на том же хосте. Вы можете установить данные параметры, указав их как флаги, или используя файл конфигурации демона.

Следующие параметры демона должны быть настроены для каждого демона:

-b, --bridge=                          Attach containers to a network bridge
--exec-root=/var/run/docker            Root of the Docker execdriver
--data-root=/var/lib/docker            Root of persisted Docker data
-p, --pidfile=/var/run/docker.pid      Path to use for daemon PID file
-H, --host=[]                          Daemon socket(s) to connect to
--iptables=true                        Enable addition of iptables rules
--config-file=/etc/docker/daemon.json  Daemon configuration file
--tlscacert="~/.docker/ca.pem"         Trust certs signed only by this CA
--tlscert="~/.docker/cert.pem"         Path to TLS certificate file
--tlskey="~/.docker/key.pem"           Path to TLS key file

Когда ваши демоны используют разные значения данных флагов, вы можете без проблем запускать их на одном хосте. Очень важно правильно понимать значение данных опций и правильно их использовать.

  • Флаг -b, --bridge= установлен на docker0 в качестве мостовой сети по умолчанию. Он создаётся автоматически при установке Docker. Если вы не используете значение по умолчанию, вы должны создать и настроить мост вручную или просто устанавливает для него значение «нет»: --bridge=none

  • --exec-root — это путь, по которому хранится состояние контейнера. Значение по умолчанию — /var/run/docker. Указывает здесь путь для запущенного демона.

  • --data-root — это путь, по которому хранятся постоянные данные, такие как образы, тома и состояние кластера. Значение по умолчанию — /var/lib/docker. Чтобы избежать конфликта с другими демонами, задаёт данный параметр отдельно для каждого демона.

  • -p, --pidfile=/var/run/docker.pid — это путь, по которому хранится идентификатор процесса демона. Указывает здесь путь к вашему pid-файлу.

  • --host=[] указывает, где демон Docker будет прослушивать клиентские подключения. Если не указано, по умолчанию используется /var/run/docker.sock.

  • --iptables=false запрещает демону Docker добавлять правила iptables. Если несколько демонов управляют правилами iptables, они могут перезаписать правила, установленные другим демоном. Имейте в виду, что отключение этого параметра требует, чтобы вы вручную добавили правила iptables для предоставления портов контейнера. Если вы запретите Docker добавлять правила iptables, Docker также не будет добавлять правила маскировки IP-адресов, даже если вы устанавливает --ip-masq на true. Без правил маскировки IP-адресов контейнеры Docker не смогут подключаться к внешним хостам или Интернету при использовании сети, отличной от моста по умолчанию.

  • --config-file=/etc/docker/daemon.json — это путь, по которому хранится файл конфигурации. Вы можете использовать его вместо флагов демона. Указывает путь для каждого демона.

  • --tls* Демон Docker поддерживает режим --tlsverify, который обеспечивает зашифрованные и аутентифицированные удаленные подключения. Параметры --tls* позволяют использовать определённые сертификаты для отдельных демонов.

Пример скрипта для отдельного «загрузочного» экземпляра демона Docker без сети:

$ sudo dockerd \
        -H unix:///var/run/docker-bootstrap.sock \
        -p /var/run/docker-bootstrap.pid \
        --iptables=false \
        --ip-masq=false \
        --bridge=none \
        --data-root=/var/lib/docker-bootstrap \
        --exec-root=/var/run/docker-bootstrap