Tool.Yun
Удобные инструменты для разработчиков
CSV в JSON
JS в JSON
JSON в .env
JSON в C#
JSON в CSV
JSON в Go
JSON в JS
JSON в Java
JSON в MessagePack
JSON в PHP-массив
JSON в TOML
JSON в TS
JSON в XML
JSON в данные
JSON в схему
JSON для объекта
Json в PHP-код
Json в Python
Json в SQL DDL
Json-запрос
ObjGen в JSON
PHP-массив в JSON
tools.json-patch.name
Анализатор размера JSON
Конвертер JSON в YAML
Конвертер строк JSON
Линтер JSON
Мастер сортировки JSON
Минимизация JSON
Пакет сообщений в JSON
Редактор JSON
Сглаживатель/распрямитель JSON
Слияние JSON
Сравнение JSON
Тестер JQ/JSONPath
Форматирование JSON
Экранирование/разэкранирование JSON
HTML в PDF
PDF-компрессор
Извлекатель страниц PDF
Извлекатель текста из PDF-файлов
Конкатенатор PDF
Линеаризация PDF/FastWeb
Проверка подписи PDF
Расшифровка и разблокировка PDF
Шифрование PDF
ObjGen в HTML
XML ЛИНТЕР
XML в JSON
Тестер XPath
Тестер XSLT
Форматирование XML
HTML WYSIWYG редактор
HTML в XHTML
HTML в данные
HTML-минификатор
MIME типы
URL Fanger
Генератор SVG placeholder
Генератор UTM URL
Генератор градиентов CSS
Изображение в CSS
Информация о устройстве
Кодирование/декодирование URL-форматированных строк
Коды состояния HTTP
Конвертер CSS XPath
Конвертер REM в пиксели
Конвертер единиц CSS
Конвертер цветов
Очиститель URL
Очистка HTML
Парсер User-agent
Преобразование строки (slug)
Проверка контраста цветов
Создатель текстовых фрагментов URL
Форматирование CSS
Форматирование HTML
Цветовой круг
Экранирование HTML сущностей
Генератор BIP39 паролей
Генератор NanoID
Генератор OTP кодов
Генератор PIN-кодов
Генератор UUID
Генератор нумеронимов
Генератор паролей
Генератор паролей Diceware
Генератор случайных чисел
Генератор токенов
Конвертер UUID
Валидатор алгоритма Луна
Валидатор и парсер IBAN
Валидатор и парсер ISBN
Валидатор номеров НДС
Калькулятор SLA
Калькулятор ИМТ
Калькулятор темпа бега
Конвертер RMB в прописной формат
Конвертер валют
Конвертер календарей
Объяснение команды оболочки
Онлайн-словарь
Парсер и форматировщик телефонов
Поиск Unicode
Поиск кодов стран ISO 3166
Поисковик ISO 639
Проверка кредитной карты
Рекомендации по освещению IES
Совместимость лицензий ПО
Cron/Будильник по будням
Будильник времени
Генератор ICAL
Какой день?
Калькулятор ETA
Калькулятор TTL
Калькулятор дат и длительности
Калькулятор длительности
Калькулятор дней
Конвертер даты и времени
Конвертер номеров недель
Конвертер часовых поясов
Объединитель iCal
Парсер ICAL файлов
Таймер обратного отсчета
Хронометр
Docker Compose в Kubernetes
Docker Compose в Quadlets
Docker Compose в файл .env
Docker Inspect для Docker Run
Docker run в Kubernetes
Docker запускается в Quadlets
Traefik Docker Compose Maker
Валидатор Docker Compose
Генератор RBAC для Kubernetes
Генератор меток Dockerfile
Загрузчик образов Docker
Конвертер Docker Compose
Конвертер Docker Compose в Docker run
Конвертер Docker run в Docker compose
Метки Docker Pangolin
Бросок кубика
Выбор карт
Колесо фортуны
Монетка
Калькулятор географического расстояния
Калькулятор процентов
Калькулятор соотношения сторон
Конструктор бенчмарков
GIF в MP4
OCR изображений и PDF
Водяной маркер
Запись с камеры
Изменение размера изображения
Изображение в SVG (potrace)
Инвертор цветов изображения
Конвертер HEIC
Конвертер ICO/PNG
Конвертер форматов изображений
Обрезать изображение
Предварительный просмотр SVG
Сравнение изображений
Удаление EXIF
Удалить фоновое изображение
Чтение EXIF/метаданных изображений
CSV в данные
Excel в данные
Генератор ULID
Калькулятор потребления энергии
Конвертер Base64 Hex массива
Конвертер Torrent в Magnet
Конвертер географических координат
Конвертер единиц хранения данных
Конвертер различных единиц
Конвертер римских цифр
Конвертер свойств
Конвертер символов Unicode в Java-сущности
Конвертер строк base64
Конвертер файлов Base64
Конвертер форматов переменных Env
Конвертер числовых систем
Нормализатор email
Преобразователь дБм мВт
Текст в Unicode
Текст в двоичный ASCII
AGE Криптография
Argon2 Hasher
Bcrypt
Niceware Bytes в парольную фразу
Генератор CSR
Генератор Hmac
Генератор JWT
Генератор PGP-ключей
Генератор RSA ключей
Генератор ключей ECDSA
Генератор ключей Ed25519
Генератор сертификатов X509
Калькулятор CRC
Кодировщик/декодер Bech32
Конвертер SSL-сертификатов
Парсер JWT
Парсер SAML
Парсер сертификатов/ключей
Пасето/ПАСЕРК Локальный
Пасето/ПАСЕРК Публичный/Частный
Подпись и проверка RSA/DSA/ECDSA
Секретный обмен Шамира
Хеширование текста
Хеширование файлов
Шифрование / дешифрование текста
Шифрование PGP
Шифрование RSA
Шифрование строк Jasypt
Шифрование файлов PGP
Шифрование/дешифрование Ansible Vault
Визуализатор тригонометрических уравнений/кривых
Двоичный калькулятор
Конвертер математических форматов
Математический OCR
Оцениватель математических выражений
калькулятор чаевых
Конструктор выражений Cron
Json в Protobuf
Json в SQL INSERT
Json в TypeScript
SQL Minifier
Генератор GitIgnore
Генератор Mailto
Генератор атрибутов Gita
Генератор мета-тегов Open Graph
Генератор параметров SQL
Генератор секретов Джанго
Генератор скриптов для нагрузочного тестирования K6
Генератор таблиц базы данных
Генератор фавиконов
Деобфускатор JavaScript
Конвертер Curl
Конвертер Hex файлов
Конвертер цитат
Конструктор создания баз данных
Конструктор строк подключения к базе данных
Обфускатор JavaScript
Подделка данных
Подсветка кода/скриптов
Преобразователь трассировки стека
Разделитель файлов
Таймер Pomodoro
Тестер API
Тестер Picomatch
Тестер аварийного выхода ANSI
Тестировщик пользовательского интерфейса Swagger
Улучшение и минимизация CSS/JS
Форматирование JavaScript
Форматирование SQL
Экранирование строк
редактор команд CLI
BIMI DNS Generator
DKIM DNS Generator
DNS-запросы
DNS/RDAP-запросы Cloudflare
DNSBL-проверщик
IPv4-6/IPRange/CIDR в IPRange/CIDR/IPMask
IPv4/6 CIDR в диапазон IP
tools.restic-command-generator.name
tools.url-redirection-checker.name
Авторизация SIP
Анализатор надежности пароля
Визуальный калькулятор подсетей
Генератор Apache LogRotate
Генератор Crontab
Генератор DNS DMARC
Генератор DNS-запросов PTR
Генератор FStab
Генератор HTAccess
Генератор Htpasswd/Htaccess
Генератор IPv6 ULA
Генератор Iptables
Генератор MAC-адресов
Генератор Option43
Генератор Rsync
Генератор SPF DNS
Генератор WPA PSK
Генератор базовой аутентификации
Генератор команд Curl
Генератор команд UFW
Генератор команд завершения работы
Генератор конфигураций Wireguard
Генератор случайных портов
Геолокация IP
Декодер ARPA
Декодер X-VR-SpamCause
Диапазон IPv4/6 в CIDR
Исключение подсетей IP
Калькулятор HDD
Калькулятор RAID
Калькулятор ZPOOL RAID
Калькулятор chmod
Калькулятор надежности RAID
Калькулятор подсетей IPv4
Калькулятор подсетей IPv6
Калькулятор скорости передачи данных
Конвертер IPv4 адресов
Конвертер IPv6 адресов
Конвертер MAC-адресов
Конвертер Punycode
Линеаризатор команд оболочки
Множественный загрузчик ссылок
Мой IP-адрес
Надежность пароля Zxcvbn
Номера портов
Пинг
Поиск MAC-адреса
Проверка Whois
Расширитель диапазона IPv4
Санитайзер HAR
Список подсетей IPv4
Тестер WebSocket
Тестер микрофона
Тестер портов TCP/UDP
Форматирование Nginx
Форматировщик команд оболочки
Целые числа в IPv4/IPv6
Шпаргалка по ZPool
генератор командной строки firewalld
DNS-тестер
Nmap Command Builder
Анализатор отчетов DMARC
Анализатор файлов cookie
Генератор TCPDump
Декодер EMV TLV
Декодер Safelink
Декодер ссылок SharePoint
Декодер транзакций ETH
Детектор/декодер текстовых кодировок
Извлечение ID Snowflake
Информация о коде кнопки
Калькулятор резисторов
Конвертер GZip/Deflate
Конвертер Hex
Конвертер MIME-кодировки
Конвертер MongoDB ObjectId
Конвертер SMART Raw
Конвертер среднего порядка байтов
Конвертер чисел с плавающей точкой
Консоль последовательного порта
Конструктор URL-адресов
Маскирование конфиденциальных данных
Определение типа файла
Парсер Outlook MSG
Парсер URL
Парсер email
Парсер возвратов электронной почты
Поиск свойств ActiveDirectory LDAP
Расширитель коротких URL-адресов
Схема подключения кабеля RJ45 Cat6
Тестер HTTPS
Тестер битых пикселей
Тестер распространения DNS
Чтение файлов Parquet
键盘测试器
TOML Linter
TOML в JSON
TOML в YAML
JSON в TOON
RSVP Reader
TOON в JSON
Unicode в GSM-7
Выбор случайных строк
Выбор эмодзи
Генератор Lorem ipsum
Генератор команд Sed
Генератор цитирований
Генератор/баннер Zalgo
Диаграмма структуры папок
Извлечь текст из HTML
Изображение в ASCII-арт
Калькулятор Левенштейна
Кодер/декодер токенов GPT
Конвертер азбуки Морзе
Конвертер раскладок клавиатуры
Конвертер регистра
Конвертер рун
Конвертер списков
Обфускация строки
Отдельные слова
Оценщик токенов GPT
Перевод текста в имена Unicode
Переводчик текстов
Переход к пробелам с помощью клавиши Tab
Поделиться ссылкой в социальных сетях
Поиск дублированных строк
Проверка I и L
Разделитель подсказок ИИ
Рисователь ASCII текста
Сравнение списков
Сравнение текстов
Сравнение шрифтов
Статистика текста
Текст в алфавит НАТО
Тестер регулярных выражений
Умный заменитель текста
Файлы пакета для ИИ
Форматировщик Unicode
Экспортер Mermaid
HTML в Markdown
Markdown Diff
Markdown Lorem Ipsum
Markdown в HTML
Markdown для данных
tools.markdown-format-converter.name
Вставить как Markdown
Генератор оглавления Markdown
Генератор таблиц Markdown
Предварительный просмотр Markdown
Преобразование Epub в Markdown
Преобразование Markdown в текст
Разметка в DOCX
Редактор Markdown
Украшение таблиц Markdown
Конвертер давления
Конвертер единиц длины
Конвертер единиц массы
Конвертер единиц площади
Конвертер единиц силы
Конвертер единиц энергии
Конвертер мощности
Конвертер объема
Конвертер освещенности
Конвертер префиксов СИ
Конвертер температуры
Конвертер углов
Преобразователь объемного расхода
Преобразователь пищевой энергии
Преобразователь скорости
Ускорительный преобразователь
Фитнес-компьютер
Частотный преобразователь
Калькулятор амортизации
Шпаргалка Docker
Шпаргалка Git
Шпаргалка JQ
Шпаргалка Nano
Шпаргалка по Bash
Шпаргалка по CSS-селекторам
Шпаргалка по Docker Compose
Шпаргалка по Docker SWARM
Шпаргалка по Dockerfile
Шпаргалка по JSONPath
Шпаргалка по K8s
Шпаргалка по Markdown
Шпаргалка по Nginx
Шпаргалка по PowerShell
Шпаргалка по Sed
Шпаргалка по VIM
Шпаргалка по XPath
Шпаргалка по командам Tmux
Шпаргалка по командам Zellij
Шпаргалка по командам экрана
Шпаргалка по команде chmod
Шпаргалка по регулярным выражениям
Шпаргалка по регулярным выражениям
Шпаргалка по семантическим коммитам Git
tools.epc-qrcode-generator.name
Валидатор GTIN
Генератор QR-кодов
Генератор QR-кодов для WiFi
Генератор QR-кодов для контактов
Генератор штрих-кодов
Декодер QR-кода
Чтение штрих-кодов
YAML в TOML
Конвертер YAML в JSON
Сглаживатель/распрямитель YAML
Слияние YAML
Форматирование YAML

Шпаргалка по Docker SWARM

Шпаргалка по режиму Docker Swarm

Docker Swarm mode is Docker’s native clustering and orchestration solution. It turns a group of Docker hosts into a single virtual system with high availability, load balancing and a declarative deployment model — using the CLI you already know.

  • Built-in orchestration with a declarative service model
  • Rolling updates and one-command rollback
  • Self-healing: failed replicas are rescheduled automatically
  • Secure node-to-node communication over mutual TLS, rotated automatically
  • Secrets and configs distributed straight from the cluster store

ℹ️ Swarm does not auto-scale on load. Replica counts are set manually with --replicas or docker service scale.

🧱 Concepts

TermWhat it is
NodeA Docker engine that joined the swarm — a manager or a worker
ManagerKeeps cluster state via Raft, schedules tasks, serves the API
WorkerRuns tasks only; has no view of the cluster state
ServiceThe declaration of what should run (image, replicas, ports, …)
TaskOne container slot of a service, scheduled onto a node
StackA group of services deployed together from a Compose file

📌 Swarm Initialization

# initialize a swarm; this node becomes the first manager
docker swarm init

# pick the interface to advertise on multi-homed hosts
docker swarm init --advertise-addr <manager-ip>

# address pool for the overlay networks
docker swarm init --default-addr-pool 10.20.0.0/16

# print the command a worker needs to join
docker swarm join-token worker

# print the command a manager needs to join
docker swarm join-token manager

# run on the joining node
docker swarm join --token <token> <manager-ip>:2377

# rotate a token, invalidating the old one
docker swarm join-token --rotate worker

# leave the swarm (on a worker)
docker swarm leave

# leave on a manager, or on the last node
docker swarm leave --force

# keep fewer terminated tasks per service
docker swarm update --task-history-limit 5

# lifetime of the node certificates
docker swarm update --cert-expiry 720h

# rotate the swarm certificate authority
docker swarm ca --rotate

🔌 Ports that must be open between nodes

PortProtocolUsed for
2377TCPCluster management (managers only)
7946TCP + UDPNode discovery and gossip
4789UDPOverlay network data plane (VXLAN)
IP protocol 50 (ESP)—Only with encrypted overlay networks

👥 Node Management

# list the nodes of the swarm
docker node ls

# filter by role, id, name, label, membership
docker node ls --filter role=manager

# readable summary of one node
docker node inspect <node> --pretty

# a single field via a Go template
docker node inspect -f '{{.Status.State}}' <node>

# worker  → manager
docker node promote <node>

# manager → worker
docker node demote <node>

# move tasks off and stop scheduling new ones
docker node update --availability drain <node>

# keep running tasks, schedule nothing new
docker node update --availability pause <node>

# bring a drained or paused node back
docker node update --availability active <node>

# label a node for placement constraints
docker node update --label-add env=production <node>

# remove a label again
docker node update --label-rm env <node>

# tasks running on a node
docker node ps <node>

# remove a node that already left
docker node rm <node>

# remove an unreachable node
docker node rm --force <node>

💡 Drain a node before maintenance (--availability drain), then set it back to active. Swarm reschedules the tasks for you.

🧠 Manager Nodes & Raft

Managers orchestrate tasks, maintain the cluster state through Raft consensus and serve the API. Several managers give you high availability, but only one is the leader at a time.

⚠️ Use an odd number of managers (3, 5 or 7). Raft tolerates (N-1)/2 failures — 3 managers survive 1 loss, 5 survive 2. Beyond 7 the consensus overhead outweighs the benefit.

# swarm and Raft state of the local node
docker info

# details of the current node, manager status included
docker node inspect self --pretty

# encrypt the Raft logs at rest
docker swarm update --autolock=true

# unlock a manager after a restart
docker swarm unlock

# show the current unlock key
docker swarm unlock-key

# rotate it
docker swarm unlock-key --rotate

📦 Service Management

# create a service
docker service create --name <service> <image>

# create a service with a fixed replica count
docker service create --name <service> --replicas <n> <image>

# create a global service: one task on every node
docker service create --name <service> --mode global <image>

# list services
docker service ls

# filter the list
docker service ls --filter name=<service>

# readable service definition
docker service inspect <service> --pretty

# tasks and the nodes they run on
docker service ps <service>

# change the replica count
docker service scale <service>=<n>

# scale several services at once
docker service scale <svc-a>=3 <svc-b>=5

# roll out a new image
docker service update --image <new-image> <service>

# redistribute tasks without changing anything
docker service update --force <service>

# go back to the previous definition
docker service rollback <service>

# follow the logs of every task
docker service logs -f <service>

# recent output only
docker service logs --tail 100 --since 10m <service>

# remove a service
docker service rm <service>

Changing a running service

# add or replace an environment variable
docker service update --env-add KEY=value <service>

# remove one
docker service update --env-rm KEY <service>

# publish another port
docker service update --publish-add 8080:80 <service>

# stop publishing it
docker service update --publish-rm 8080 <service>

# attach a volume
docker service update --mount-add type=volume,src=data,dst=/data <service>

# detach it again, by target path
docker service update --mount-rm /data <service>

# add a placement constraint
docker service update --constraint-add 'node.labels.env==prod' <service>

# at most one task per node
docker service update --replicas-max-per-node 1 <service>

# change the resource limits
docker service update --limit-memory 512m --reserve-memory 256m <service>

🔁 Replicas & Modes

Replicas define how many instances of a service run across the swarm. Swarm spreads them over the available nodes and reschedules them when a task or a node fails.

ModeFlagBehaviour
Replicated--mode replicated (default)Run exactly --replicas tasks, anywhere they fit
Global--mode globalExactly one task per eligible node
Replicated job--mode replicated-jobRun --replicas tasks to completion
Global job--mode global-jobRun one task to completion on every node
# five tasks
docker service create --replicas 5 --name myapp myimage

# scale the same service up to ten
docker service scale myapp=10

# one per node
docker service create --mode global --name agent myimage

# batch job: 20 tasks in total, 4 running at a time
docker service create --mode replicated-job --replicas 20 \
  --max-concurrent 4 --name migrate myimage

🐝 Tasks & Containers

A task is a single container slot managed by Swarm; it maps to one container on one node and is never moved — a failed task is replaced by a new one.

# tasks of a service, with their node
docker service ps <service>

# full error messages — start debugging here
docker service ps --no-trunc <service>

# hide the terminated tasks
docker service ps -f "desired-state=running" <service>

# tasks on one node
docker node ps <node>

# containers on the current node
docker container ls

# low-level details of one container
docker container inspect <container-id>
Task stateMeaning
NEW / PENDINGAccepted, waiting for a node that satisfies the constraints
ASSIGNED / PREPARINGSent to a node, image being pulled
STARTING / RUNNINGThe container is starting or up
COMPLETEA job task finished successfully
FAILEDThe container exited with an error
SHUTDOWNStopped on purpose (update, drain, scale down)
REJECTEDThe node refused the task (missing image, bad mount)
ORPHANEDThe node has been unreachable too long

🎯 Placement

docker service create --constraint 'node.role==worker' --name web nginx

docker service create --constraint 'node.labels.env==production' --name api myimage

docker service create --placement-pref 'spread=node.labels.zone' --name web nginx

docker service create --replicas-max-per-node 1 --name web nginx
ExpressionMatches
node.rolemanager or worker
node.hostnameThe node’s hostname
node.idThe node’s ID
node.labels.<key>A label set with docker node update --label-add
engine.labels.<key>A label set in the engine’s daemon.json
node.platform.os / node.platform.archlinux, windows / amd64, arm64

🌐 Networking

An overlay network is a virtual network spanning multiple Docker hosts. Containers on different nodes talk as if they were on the same L2 segment, with DNS-based service discovery built in.

# create an overlay network
docker network create --driver overlay <network>

# encrypt the data plane too
docker network create --driver overlay --opt encrypted <network>

# let standalone containers join
docker network create --driver overlay --attachable <network>

# list networks
docker network ls

# attached services and containers
docker network inspect <network>

# attach at creation time
docker service create --name <service> --network <network> <image>

# attach an existing service
docker service update --network-add <network> <service>

# detach it again
docker service update --network-rm <network> <service>

Publishing ports

# routing mesh (ingress)
docker service create --publish 8080:80 --name web nginx

# host port, no mesh
docker service create --publish mode=host,target=80,published=8080 --name web nginx
ModeBehaviour
ingress (default)Every node accepts the port and load-balances to the tasks
hostThe port is published only on nodes running a task — no mesh, no extra hop

🔄 Rolling Updates & Rollback

docker service create \
  --name web \
  --replicas 5 \
  --update-parallelism 2 \
  --update-delay 10s \
  --update-failure-action rollback \
  --update-monitor 30s \
  nginx:1.25

# trigger the rolling update
docker service update --image nginx:1.26 web

# return to the previous definition
docker service rollback web
FlagDescription
--update-parallelismHow many tasks are updated at once (0 = all)
--update-delayPause between batches
--update-failure-actionpause (default), continue or rollback
--update-monitorHow long a task is watched before it counts as healthy
--update-orderstop-first (default) or start-first
--rollback-parallelismSame knobs for the rollback path (--rollback-delay, --rollback-monitor, --rollback-failure-action, --rollback-order)

🩺 Health Checks

Swarm reschedules a task as soon as its health check fails, so an update never marks a broken image as healthy.

docker service create \
  --name api \
  --health-cmd 'curl -f http://localhost:8080/health || exit 1' \
  --health-interval 10s \
  --health-timeout 3s \
  --health-retries 3 \
  --health-start-period 30s \
  myimage

🔐 Secrets

Secrets are encrypted in the Raft log and mounted into the container as in-memory files under /run/secrets/.

# create from a file
docker secret create db_password ./db_password.txt

# create from stdin
echo "s3cr3t" | docker secret create db_password -

# list secrets
docker secret ls

# metadata only — never the value
docker secret inspect db_password

# attach a secret; it appears at /run/secrets/db_password
docker service create --name db --secret db_password postgres:16

# ...or mount it at a custom path with a fixed mode
docker service create --name db \
  --secret source=db_password,target=/run/secrets/pg_pw,mode=0400 postgres:16

# only possible when no service uses it
docker secret rm db_password

Rotating a secret — create the new one, swap it, then drop the old one:

echo "n3w-s3cr3t" | docker secret create db_password_v2 -

docker service update \
  --secret-rm db_password \
  --secret-add source=db_password_v2,target=db_password \
  db

docker secret rm db_password

🔑 Configs

Configs work like secrets but are not encrypted at rest — use them for non-sensitive files such as nginx.conf.

# create a config
docker config create my_nginx_conf ./nginx.conf

# list configs
docker config ls

# metadata and the stored content
docker config inspect my_nginx_conf

# mount a config at a specific path
docker service create \
  --name web \
  --config source=my_nginx_conf,target=/etc/nginx/nginx.conf \
  nginx

# swap in a new version of the config
docker service update \
  --config-rm my_nginx_conf \
  --config-add source=my_nginx_conf_v2,target=/etc/nginx/nginx.conf \
  web

# only when no service uses it
docker config rm my_nginx_conf

📚 Stacks

A stack is a group of related services deployed together from a Compose file — the standard production workflow for Swarm.

# deploy or update a stack
docker stack deploy -c stack.yaml mystack

# pass your registry credentials along
docker stack deploy -c stack.yaml --with-registry-auth mystack

# remove services no longer in the file
docker stack deploy -c stack.yaml --prune mystack

# list stacks
docker stack ls

# services of a stack
docker stack services mystack

# tasks of a stack
docker stack ps mystack

# tasks of a stack, with full error messages
docker stack ps --no-trunc mystack

# print the merged, resolved file
docker stack config -c stack.yaml

# remove the whole stack
docker stack rm mystack

Stacks honour the deploy: block of the Compose file (replicas, placement, resources, restart policy, update config). build:, top-level restart: and depends_on: are ignored.

🧯 Troubleshooting

# the error column tells you why a task died
docker service ps --no-trunc <service>

# application output of every task
docker service logs --tail 200 <service>

# is a node Down or Unreachable?
docker node ls

# what was actually deployed
docker service inspect --pretty <service>

# live stream of orchestration events
docker events --filter type=service
SymptomUsual cause
Task stuck in PENDINGNo node satisfies the constraints, ports, or resource reservations
no suitable nodePlacement constraint or --replicas-max-per-node cannot be met
Task loops FAILED → STARTINGThe container exits immediately — read docker service logs
REJECTED with an image errorThe image is missing on that node; use --with-registry-auth for private registries
Service unreachable from other nodesPorts 7946/4789 blocked, or the services are not on the same overlay network

🛠 Common Flags Reference

docker service create / docker service update

FlagDescription
--replicasNumber of tasks for a replicated service
--modereplicated (default), global, replicated-job, global-job
--publishPort mapping (<published>:<target>, or mode=host,...)
--mountAttach a volume or bind mount
--networkAttach to an overlay network
--constraintPlacement rule, e.g. node.role==worker
--placement-prefSpread tasks, e.g. spread=node.labels.zone
--replicas-max-per-nodeCap the tasks of this service per node
--limit-cpu / --limit-memoryHard resource limits
--reserve-cpu / --reserve-memoryResources reserved for scheduling
--secret / --configAttach a secret or a config
--env / --env-fileEnvironment variables
--restart-conditionnone, on-failure or any (default)
--health-cmd and friendsOverride the image health check
--with-registry-authForward registry credentials to the nodes

📄 Example: Production-style Web Service

docker service create \
  --name web \
  --replicas 3 \
  --publish 80:80 \
  --network webnet \
  --constraint 'node.role==worker' \
  --constraint 'node.labels.env==production' \
  --placement-pref 'spread=node.labels.zone' \
  --update-parallelism 1 \
  --update-delay 10s \
  --update-failure-action rollback \
  --update-order start-first \
  --limit-memory 512m \
  --reserve-memory 256m \
  --restart-condition any \
  nginx:1.25

📚 Resources

  • Swarm mode overview
  • Swarm services
  • Manage secrets
  • Manage configs
  • Stack file reference (Compose Spec deploy:)
  • docker service create CLI reference