Tool.Yun
Strumenti utili per gli sviluppatori
Decodificatore di codici QR
Generatore di codice QR
Generatore di codice QR WiFi
Generatore di codici a barre
Generatore di informazioni di contatto QR
Lettore di codici a barre
Validatore GTIN
tools.epc-qrcode-generator.name
Codificatore/decodificatore di array esadecimali Base64
Codificatore/decodificatore di stringhe Base64
Consumo energetico e spese del computer
Convertitore dBm mW
Convertitore di base intera
Convertitore di caratteri Unicode in entità Java
Convertitore di coordinate geografiche
Convertitore di file Base64
Convertitore di formato delle variabili ambientali
Convertitore di molte unità
Convertitore di numeri romani
Convertitore di proprietà
Convertitore di unità di archiviazione dati
Da CSV a dati
Excel per i dati
Generatore ULID
Normalizzatore di posta elettronica
Testo a Unicode
Testo in binario UTF-8
Torrent a Magnet
Analizzatore SAML
Bcrypt
Calcolatrice CRC
Codificatore/Decodificatore Bech32
Condivisione del segreto di Shamir
Convertitore di certificati SSL
Cripta e decifratura del vault Ansible
Crittografa / decrittografa testo
Crittografia AGE
Crittografia PGP
Crittografia RSA
Crittografia delle stringhe Jasypt
Crittografia file PGP
Firmatario e verificatore RSA/DSA/ECDSA
Generatore HMAC
Generatore JWT
Generatore di CSR
Generatore di certificati X509
Generatore di chiavi PGP
Generatore di coppie di chiavi ECDSA
Generatore di coppie di chiavi Ed25519
Generatore di coppie di chiavi RSA
Hash del testo
Hasher Argon2
Hasher di file
Niceware Bytes in passphrase
Parser JWT
Parser di certificati/chiavi
Paseto/PASERK Local
Paseto/PASERK Pubblico/Privato
Allarme orario
Calcolatore ETA
Calcolatrice Data+Durata
Calcolatrice TTL
Calcolatrice dei giorni
Calcolatrice della durata
Conto alla rovescia
Convertitore data-ora
Convertitore dei numeri delle settimane
Convertitore di fuso orario
Cron/Allarme giorno feriale
Cronometro
Fusione iCal
Generatore ICAL
Parser di file ICAL
Quale giorno?
Calcolatore BMI
Calcolatore del ritmo di corsa
Calcolatrice SLA
Compatibilità della licenza software
Controllo della carta di credito
Convertitore di calendario
Convertitore di valuta
Convertitore maiuscolo RMB
Dizionario online
Linee guida per l'illuminazione IES
Parser e formattatore di numeri di telefono
Ricerca ISO 639
Ricerca Unicode
Ricerca codici paese ISO 3166
Spiega il comando Shell
Validatore Luhn
Validatore di numeri di partita IVA
Validatore e parser IBAN
Validatore e parser ISBN
Convertitore da "docker run" a Docker compose
Convertitore da Docker Compose a Docker Run
Convertitore di formato Docker Compose
Docker Compose nel file .env
Docker Compose per Quadlet
Docker compone per Kubernetes
Esecuzione di Docker su Kubernetes
Esecuzione di Docker su Quadlets
Etichette Docker Pangolin
Generatore RBAC per Kubernetes
Generatore di etichette Dockerfile
Ispezione Docker per esecuzione Docker
Scaricatore di immagini Docker
Traefik Docker Compose Maker
Validatore Docker Compose
Calcolatore di ammortamento
Convertitore di accelerazione
Convertitore di energia alimentare
Convertitore di frequenza
Convertitore di illuminamento
Convertitore di portata volumetrica
Convertitore di potenza
Convertitore di prefissi SI
Convertitore di temperatura
Convertitore di unità angolari
Convertitore di unità di area
Convertitore di unità di energia
Convertitore di unità di forza
Convertitore di unità di lunghezza
Convertitore di unità di massa
Convertitore di unità di pressione
Convertitore di unità di volume
Convertitore di velocità
Prodotti di sicurezza
Analizzatore di e-mail di rimbalzo
Analizzatore di posta elettronica
Analizzatore di report DMARC
Calcolatrice di resistori
Codificatore/decodificatore esadecimale
Console porta seriale
Convertitore GZip/Deflate
Convertitore Middle-Endian
Convertitore ObjectId MongoDB
Convertitore SMART Raw
Convertitore di codifica MIME
Convertitore di numeri in virgola mobile
Decodificatore EMV TLV
Decodificatore URL di condivisione di SharePoint
Decodificatore di Outlook Safelink
Decodificatore di transazioni ETH
Espansore URL brevi
Estrattore ID fiocco di neve
Foglio riassuntivo sul cablaggio RJ45 Cat6
Generatore TCPDump
Generatore URL
Generatore di comandi Nmap
Informazioni sul codice tasto
Lettore di file Parquet
Mascheramento dei dati sensibili
Parser MSG di Outlook
Parser URL
Parser dei cookie
Ricercatore di proprietà LDAP di ActiveDirectory
Rilevatore di tipo di file
Rilevatore/decodificatore di set di caratteri di testo
Tester DNS
Tester HTTPS
Tester di pixel morti
Tester di propagazione DNS
键盘测试器
Convertitore UUID
Generatore UUID
Generatore di NanoID
Generatore di codice OTP
Generatore di codice PIN
Generatore di frase BIP39
Generatore di numeri casuali
Generatore di passphrase
Generatore di password Diceware
Generatore di token
Generatore numeronym
Lanciatore di dadi
Lanciatore di monete
Ruota della fortuna
Selettore di carte
Anteprima SVG
Confronto immagini
Convertitore HEIC
Convertitore ICO/PNG
Convertitore di formati di immagine
Da GIF a MP4
Filigrana
Immagine in SVG (ritratto)
Invertitore di colore dell'immagine
Lettore di qualità EXIF/Metadati/GPS/JPEG dell'immagine
OCRize immagine e PDF
Registratore di telecamera
Ridimensionatore di immagini
Rimuovi EXIF
Rimuovi lo sfondo dell'immagine
Ritaglia immagine
Analizzatore di dimensioni JSON
Array PHP in JSON
CSV in JSON
Codice JSON in PHP
Convertitore JSON to TOML
Convertitore JSON to YAML
Convertitore da JS a JSON
Convertitore da JSON a JS
Convertitore di stringhe JSON
Da Json a Python
Da ObjGen a JSON
Differenza JSON
Editor JSON
Fusione JSON
JSON Flattener/Unflattener
JSON Linter
JSON all'oggetto
JSON in .env
JSON in C#
JSON in MessagePack
JSON in PHP-Array
JSON in SQL DDL
JSON in Schema
JSON in TS
JSON in XML
JSON in dati
JSON in entità Java
JSON per andare
JSON prettify e format
JSON sort master
JSON to CSV
Json Escaper/Unescaper
Minify JSON
Pacchetto messaggi in JSON
Query Json
Tester Jq/JSONPath
tools.json-patch.name
Calcolatore di mance
Calcolatrice binaria
Convertitore di formati matematici
OCR matematico
Valutatore matematico
Visualizzatore di curve trigonometriche/equazioni
Benchmark builder
Calcolatore di percentuale
Calcolatrice del rapporto d'aspetto
Calcolatrice della distanza geografica
Compressore PDF
Concatenatore PDF
Crittografia PDF
Da HTML a PDF
Decifrare e sbloccare PDF
Estrattore di pagine PDF
Estrattore di testo PDF
Pdf Linearizza/FastWeb
Verificatore firme PDF
Generatore di espressioni Cron
ARPA Decoder
Analizzatore di forza della password
Autorizzazione SIP
Calcolatore chmod
Calcolatore dell'intervallo CIDR-IPv4/6
Calcolatore della velocità di trasferimento dati
Calcolatore di affidabilità RAID
Calcolatore di sottoreti IPv4
Calcolatore di sottoreti visuale
Calcolatrice HDD
Calcolatrice RAID
Calcolatrice RAID ZPOOL
Calcolatrice dell'intervallo IPv4/6 per CIDR
Calcolatrice della subnet IPv6
Calcolatrice di esclusione delle subnet IP
Controllo DNSBL
Controllo Whois
Convertitore Punycode
Convertitore di indirizzi IPv4
Convertitore di indirizzi IPv6
Convertitore di indirizzi MAC
Decodificatore X-VR-SpamCause
Elenco di sottoreti IPv4
Espansore di intervallo IPv4
Foglio riassuntivo di ZPool
Formattatore Nginx
Formattatore di comandi della shell
Forza della password Zxcvbn
Generatore Apache LogRotate
Generatore DNS BIMI
Generatore DNS DKIM
Generatore DNS DMARC
Generatore DNS PTR
Generatore DNS SPF
Generatore FStab
Generatore HTAccess
Generatore Htpasswd/htaccess
Generatore Iptables
Generatore Option43
Generatore Rsync
Generatore ULA IPv6
Generatore WPA PSK
Generatore di autenticazione di base
Generatore di comandi Curl
Generatore di comandi UFW
Generatore di comandi di arresto
Generatore di configurazione Wireguard
Generatore di crontab
Generatore di indirizzi MAC
Generatore di porte casuali
HAS Sanitizer
IPv4-6/IPRange/CIDR in IPRange/CIDR/IPMask
Il mio indirizzo IP
Interi in IPv4/IPv6
Linearizzatore di comandi della shell
Numeri di porta
Ping
Posizione geografica IP
Query DNS
Query DNS/RDAP di Cloudflare
Ricerca indirizzo MAC
Scaricatore multi-link
Test Websocket
Tester di porta TCP/UDP
Tester per microfoni
generatore di riga di comando firewalld
tools.restic-command-generator.name
tools.url-redirection-checker.name
Anteprima dello sconto
Conversione da Markdown a DOCX
Conversione da Markdown a HTML
Conversione da Markdown a Testo
Da Epub a Markdown
Da HTML a markdown
Differenza Markdown
Editor di Markdown
Generatore di indice Markdown
Generatore di tabelle Markdown
Incolla come Markdown
Markdown Lorem Ipsum
Markdown Table Prettifier
Markdown per i dati
tools.markdown-format-converter.name
Foglio di riferimento sulla sintassi JSONPath
Foglio di riferimento sulla sintassi XPath
Foglio riassuntivo K8s
Foglio riassuntivo Nano
Foglio riassuntivo VIM
Foglio riassuntivo comune sulle espressioni regolari
Foglio riassuntivo dei comandi dello schermo
Foglio riassuntivo dei selettori CSS
Foglio riassuntivo del comando Tmux
Foglio riassuntivo del comando Zellij
Foglio riassuntivo del comando chmod
Foglio riassuntivo delle espressioni regolari
Foglio riassuntivo di Bash
Foglio riassuntivo di Docker
Foglio riassuntivo di Docker Compose
Foglio riassuntivo di Docker SWARM
Foglio riassuntivo di Dockerfile
Foglio riassuntivo di Jq
Foglio riassuntivo di Markdown
Foglio riassuntivo di Nginx
Foglio riassuntivo di PowerShell
Foglio riassuntivo di Sed
Foglio riassuntivo per i commit semantici Git
Git cheatsheet
CSS/JS Abbellisci e minimizza
Convertitore di citazioni
Convertitore di file HEX
Convertitore di riccioli
Da JSON a TypeScript
Divisore di file
Editor di comandi Cli
Evidenziatore di codice/script
Falsificatore di dati
Generatore GitIgnore
Generatore Mailto
Generatore di attributi Gita
Generatore di creazione di database
Generatore di favicon
Generatore di meta Open Graph
Generatore di parametri SQL
Generatore di script per test di carico K6
Generatore di segreti Django
Generatore di stringhe di connessione al database
Generatore di tabelle di database
Inserimento da Json a SQL
Javascript Prettifier
Javascript Unobfuscator/Unpacker
Json in Protobuf
Offuscatore Javascript
SQL Minifier
SQL prettify e format
Stacktrace più carino
String Escaper
Test API
Tester Picomart
Tester dell'interfaccia utente Swagger
Tester di fuga ANSI
Timer Pomodoro
TOML Linter
TOML to JSON
TOML to YAML
AI Prompt Splitter
Calcolatrice Levenshtein
Codificatore/decodificatore di token GPT
Condivisione di link social
Confronta i caratteri
Controllore I e L
Convertitore di codice Morse
Convertitore di layout di tastiera
Convertitore di liste
Convertitore di maiuscole/minuscole
Convertitore di rune
Da JSON a TOON
Da TOON a JSON
Diagramma della struttura delle cartelle
Differenza di testo
Elenchi Confronta
Esportatore di sirene
Estrarre testo da HTML
File di pacchetto per l'IA
Formattatore Unicode
Generatore di Lorem ipsum
Generatore di citazioni
Generatore di comandi Sed
Generatore di testo ASCII Art
Generatore/Banner di Zalgo
Immagine in ASCII Art
Lettore RSVP
Obfuscator di stringhe
Parole distinte
Selettore di emoji
Selettore di righe casuali
Sostituzione intelligente del testo e interruzione di riga
Statistiche del testo
Stima del token GPT
Tab per passare agli spazi
Tester di espressioni regolari
Testo all'alfabeto NATO
Testo in nomi Unicode
Traduttore di testo
Trova linee duplicate
Unicode a GSM-7
Abbellitore CSS
Abbellitore HTML
Cattura URL
Codici di stato HTTP
Codifica/decodifica stringhe formattate in formato URL
Controllo del contrasto dei colori
Convertitore CSS XPath
Convertitore di colore
Convertitore di pixel REM
Convertitore di unità CSS
Creatore di frammenti di ricerca di testo URL
Editor HTML WYSIWYG
Escape delle entità HTML
Generatore di URL UTM
Generatore di gradienti CSS
Generatore di segnaposto SVG
HTML in XHTML
HTML in dati
Immagine in CSS
Informazioni sul dispositivo
Minificatore HTML
Parser user-agent
Pulitore HTML
Pulitore URL
Ruota dei colori
Slugify string
Tipi MIME
Da ObjGen a HTML
Formattatore XML
Linter XML
Tester XPath
Tester XSLT
XML in JSON
Convertitore YAML to JSON
Fusione YAML
YAML Flattener/Unflattener
YAML prettify e format
YAML to TOML

Foglio riassuntivo di Docker SWARM

Foglio riassuntivo della modalità 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