Tool.Yun
Ferramentas úteis para desenvolvedores
CSV para dados
Codificador/decodificador de matriz hexadecimal Base64
Codificador/decodificador de string Base64
Consumo de Energia e Despesas do Computador
Conversor dBm mW
Conversor de Coordenadas Geográficas
Conversor de algarismos romanos
Conversor de arquivo Base64
Conversor de base inteira
Conversor de caracteres Unicode para entidades Java
Conversor de formato de variáveis de ambiente
Conversor de muitas unidades
Conversor de propriedades
Conversor de unidade de armazenamento de dados
Excel para dados
Gerador ULID
Normalizador de e-mail
Texto para Unicode
Texto para binário UTF-8
Torrent para Magnet
Analisador JWT
Analisador SAML
Analisador de certificado/chave
Argon2 Hasher
Assinante e verificador RSA/DSA/ECDSA
Bcrypt
Bytes de Niceware para frase-senha
Calculadora CRC
Codificador/Decodificador Bech32
Compartilhamento secreto de Shamir
Conversor de certificado SSL
Criptografar/descriptografar texto
Criptografia AGE
Criptografia PGP
Criptografia RSA
Criptografia de arquivos PGP
Criptografia de strings Jasypt
Descriptografia de cripta do cofre Ansible
Gerador Hmac
Gerador JWT
Gerador de RSE
Gerador de certificados X509
Gerador de chaves PGP
Gerador de pares de chaves ECDSA
Gerador de pares de chaves Ed25519
Gerador de pares de chaves RSA
Hasher de arquivos
Paseto/PASERK Local
Paseto/PASERK Público/Privado
Texto hash
Decodificador de código QR
Gerador de código QR
Gerador de código QR WiFi
Gerador de código de barras
Gerador de informações de contato QR
Leitor de código de barras
Validador GTIN
tools.epc-qrcode-generator.name
Analisador e formatador de telefone
Calculadora de IMC
Calculadora de Ritmo de Corrida
Calculadora de SLA
Compatibilidade de licença de software
Conversor de Moedas
Conversor de RMB para letras maiúsculas
Conversor de calendário
Dicionário online
Diretrizes de iluminação IES
Explicar o comando Shell
Pesquisa Unicode
Pesquisador ISO 639
Pesquisador de códigos de país ISO 3166
Validador Luhn
Validador de Números de IVA
Validador e analisador de IBAN
Validador e analisador de ISBN
Verificador de cartão de crédito
Alarme de tempo
Analisador de arquivos ICAL
Calculadora TTL
Calculadora de Data+Duração
Calculadora de Duração
Calculadora de ETA
Calculadora de dias
Contagem regressiva
Conversor de data e hora
Conversor de fuso horário
Conversor de números de semana
Cron/Alarme de dia da semana
Cronômetro
Fusão iCal
Gerador ICAL
Qual dia?
Construtor de Criação de Banco de Dados
Construtor de string de conexão de banco de dados
Conversor de arquivos HEX
Conversor de cachos
Conversor de cotações
Desobfuscador/Descompactador Javascript
Divisor de Arquivos
Editor de comando CLI
Embelezador Javascript
Embelezar e formatar SQL
Escaper de Cordas
Falsificador de dados
Formatar e minimizar CSS/JS
Gerador de Favicon
Gerador de GitIgnore
Gerador de Mailto
Gerador de Parâmetros SQL
Gerador de atributos Gita
Gerador de meta gráfico aberto
Gerador de scripts de teste de carga K6
Gerador de segredos do Django
Gerador de tabelas de banco de dados
INSERÇÃO JSON para SQL
JSON para Typescript
Json para Protobuf
Marcador de código/scripts
Minificador SQL
Ofuscador de Javascript
Stacktrace mais bonito
Temporizador Pomodoro
Testador Picomatch
Testador de IU do Swagger
Testador de fuga ANSI
Testes de API
Conversor Docker Compose para Docker Run
Conversor Docker Run para Docker Compose
Conversor de formato Docker Compose
Docker Compose para Kubernetes
Docker Compose para Quadlets
Docker Compose para arquivo .env
Docker corre para Quadlets
Docker executado no Kubernetes
Downloader de imagens Docker
Etiquetas Docker Pangolin
Gerador RBAC do Kubernetes
Gerador de rótulos Dockerfile
Inspeção do Docker para execução do Docker
Traefik Docker Compose Maker
Validador do Docker Compose
Calculadora de Amortização
Folha de dicas de Markdown
Folha de dicas de commit semântico do Git
Folha de dicas de regex
Folha de dicas de sintaxe JSONPath
Folha de dicas de sintaxe XPath
Folha de dicas do Bash
Folha de dicas do Docker
Folha de dicas do Docker Compose
Folha de dicas do Docker SWARM
Folha de dicas do Dockerfile
Folha de dicas do Git
Folha de dicas do Jq
Folha de dicas do K8s
Folha de dicas do Nano
Folha de dicas do Nginx
Folha de dicas do PowerShell
Folha de dicas do Sed
Folha de dicas do VIM
Folha de referências comuns de expressões regulares
Folha de referências de seletores CSS
Guia de comandos Tmux
Guia de comandos Zellij
Guia de consulta rápida de comandos de tela
Guia de consulta rápida do comando chmod
Analisador MSG do Outlook
Analisador de Cookies
Analisador de Relatórios DMARC
Analisador de URL
Analisador de e-mail
Analisador de e-mail de rejeição
Calculadora de Resistores
Codificador/Decodificador Hexadecimal
Console de porta serial
Construtor de URLs
Construtor de comandos Nmap
Conversor GZip/Deflate
Conversor Middle-Endian
Conversor MongoDB ObjectId
Conversor SMART Raw
Conversor de codificação MIME
Conversor de números de ponto flutuante
Decodificador Outlook Safelink
Decodificador de URL de compartilhamento do SharePoint
Decodificador de transações ETH
Detector de tipo de arquivo
Detector/Decodificador de Conjunto de Caracteres de Texto
Expansor de URLs curtas
Extrator de ID de floco de neve
Gerador TCPDump
Guia de referência rápida de cabeamento RJ45 Cat6
Informações do código-chave
Leitor de arquivos Parquet
Mascarador de dados confidenciais
Pesquisador de propriedades LDAP do ActiveDirectory
Testador HTTPS
Testador de DNS
Testador de Pixel Morto
Testador de propagação de DNS
decodificador EMV TLV
键盘测试器
Computador de fitness
Conversor de Energia Alimentar
Conversor de Frequência
Conversor de Unidades de Pressão
Conversor de aceleração
Conversor de energia
Conversor de iluminância
Conversor de prefixos SI
Conversor de taxa de fluxo de volume
Conversor de temperatura
Conversor de unidades de comprimento
Conversor de unidades de energia
Conversor de unidades de força
Conversor de unidades de massa
Conversor de unidades de volume
Conversor de unidades de área
Conversor de unidades de ângulo
Conversor de velocidade
Conversor UUID
Gerador de NanoIDs
Gerador de Senhas
Gerador de UUIDs
Gerador de código OTP
Gerador de código PIN
Gerador de numerônimos
Gerador de números aleatórios
Gerador de senhas BIP39
Gerador de senhas Diceware
Gerador de tokens
Comparação de imagens
Conversor HEIC
Conversor ICO/PNG
Conversor de formatos de imagem
GIF para MP4
Gravador de câmera
Imagem para SVG (potrace)
Inversor de cores de imagem
Leitor de qualidade de imagem EXIF/Metadados/GPS/JPEG
Marcador d'água
OCRize imagem e PDF
Recortar imagem
Redimensionador de imagens
Remover EXIF
Remover o fundo da imagem
Visualizador de SVG
Achatador/Desachatador JSON
Analisador de tamanho JSON
CSV para JSON
Consulta Json
Conversor JSON para JS
Conversor JSON para YAML
Conversor de JS para JSON
Conversor de strings JSON
Código JSON para PHP
Diferença JSON
Editor JSON
Fusão JSON
Geração de objetos para JSON
JSON Linter
JSON embeleza e formata
JSON para .env
JSON para C#
JSON para CSV
JSON para MessagePack
JSON para Python
JSON para SQL DDL
JSON para TOML
JSON para TS
JSON para XML
JSON para dados
JSON para entidade Java
JSON para objeto
JSON para viagem
Json Escaper/Unescaper
Json para esquema
Matriz JSON para PHP
Mestre de classificação JSON
Minificar JSON
PHP-Array para JSON
Pacote de mensagens para JSON
Testador Jq/JSONPath
tools.json-patch.name
Cara ou coroa
Roda da fortuna
Rolador de dados
Selecionador de cartas
Avaliador de matemática
Calculadora Binária
Calculadora de gorjetas
Conversor de formatos matemáticos
OCR de matemática
Visualizador de curvas trigonométricas/de equações
Calculadora de Proporção de Aspecto
Calculadora de distância geográfica
Calculadora de porcentagem
Construtor de benchmark
Compressor de PDF
Concatenador de PDF
Criptografar PDF
Descriptografar e desbloquear PDF
Extrator de páginas PDF
Extrator de texto PDF
HTML para PDF
Pdf Linearizar/FastWeb
Verificador de assinatura de PDF
Construtor de expressões Cron
Analisador de agente de usuário
Analisador de força de senha
Apanhador de URL
Autorização SIP
Calculadora Chmod
Calculadora RAID
Calculadora ZPOOL RAID
Calculadora de HDD
Calculadora de confiabilidade RAID
Calculadora de exclusão de sub-redes IP
Calculadora de intervalo CIDR para IP IPv4/6
Calculadora de intervalo IPv4/6 para CIDR(s)
Calculadora de sub-rede IPv4
Calculadora de sub-rede IPv6
Calculadora de taxa de transferência de dados
Calculadora visual de sub-redes
Codificar/decodificar strings formatadas em URL
Consultas DNS
Consultas DNS/RDAP do Cloudflare
Conversor CSS XPath
Conversor Punycode
Conversor de Unidades CSS
Conversor de cores
Conversor de endereço IPv6
Conversor de endereço MAC
Conversor de endereços IPv4
Conversor de pixels REM
Criador de Fragmentos de Pesquisa de Texto de URL
Códigos de status HTTP
Decodificador ARPA
Decodificador X-VR-SpamCause
Downloader multi-link
Editor HTML WYSIWYG
Embelezador CSS
Embelezador HTML
Entidades HTML de escape
Expansor de alcance IPv4
Folha de dicas do ZPool
Formatador Nginx
Formatador de comandos do shell
Força da senha Zxcvbn
Gerador Apache LogRotate
Gerador Crontab
Gerador FStab
Gerador HTAccess
Gerador Htpasswd/htaccess
Gerador Option43
Gerador Rsync
Gerador WPA PSK
Gerador de Comandos Curl
Gerador de DNS BIMI
Gerador de DNS DKIM
Gerador de DNS DMARC
Gerador de DNS PTR
Gerador de DNS SPF
Gerador de Iptables
Gerador de ULA IPv6
Gerador de URL UTM
Gerador de autenticação básica
Gerador de comandos UFW
Gerador de comandos de desligamento
Gerador de configuração Wireguard
Gerador de endereços MAC
Gerador de espaço reservado SVG
Gerador de gradiente CSS
Gerador de portas aleatórias
HAS Sanitizante
HTML para XHTML
HTML para dados
IPv4-6/IPRange/CIDR em IPRange/CIDR/IPMask
Imagem para CSS
Informações do dispositivo
Inteiros para IPv4/IPv6
Limpador de HTML
Limpador de URL
Linearizador de comandos do shell
Listador de sub-redes IPv4
Localização geográfica de IP
Meu endereço IP
Minificador de HTML
Números de porta
Pesquisa de endereço MAC
Ping
Roda de cores
Slugify string
Testador de microfone
Testador de portas TCP/UDP
Teste de websocket
Tipos MIME
Verificador DNSBL
Verificador Whois
Verificador de contraste de cores
gerador de linha de comando firewalld
tools.restic-command-generator.name
tools.url-redirection-checker.name
Colar como Markdown
Diferença em Markdown
Editor de Markdown
Embelezador de tabela Markdown
Epub para Markdown
Gerador de tabelas Markdown
Gerador de índice de marcação
HTML para markdown
Markdown Lorem Ipsum
Markdown para DOCX
Markdown para HTML
Markdown para dados
Markdown para texto
Pré-visualização em Markdown
tools.markdown-format-converter.name
TOML Linter
TOML para JSON
TOML para YAML
Arquivos de pacote para IA
Calculadora de Levenshtein
Codificador/Decodificador de Token GPT
Comparar fontes
Compartilhador de links sociais
Conversor de caixa
Conversor de código Morse
Conversor de layout de teclado
Conversor de lista
Conversor de runas
Diagrama de estrutura de pastas
Diferença de texto
Divisor de prompt de IA
Estatísticas de texto
Estimador de Token GPT
Exportador de sereias
Extrair texto de HTML
Formatador Unicode
Gerador de citações
Gerador de comandos Sed
Gerador de texto de arte ASCII
Gerador/Banner Zalgo
Imagem para arte ASCII
JSON para TOON
Leitor RSVP
Listas Comparar
Localizador de linhas duplicadas
Ofuscador de cordas
Olá, gerador.
Palavras Distintas
Seletor de emojis
Seletor de linhas aleatórias
Substituidor de texto inteligente e quebra de linha
TOON para JSON
Tabulação para Espaços
Testador de Regex
Texto para nomes Unicode
Texto para o alfabeto da OTAN
Tradutor de texto
Unicode para GSM-7
Verificador I e L
Conversão de ObjGen para HTML
Formatador XML
Testador XPath
Testador XSLT
XML Linter
XML para JSON
Achatador/Desachatador YAML
Conversor de YAML para JSON
Embelezar e formatar YAML
Fusão YAML
YAML para TOML

Folha de dicas do Docker SWARM

Folha de dicas do modo 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