[{"data":1,"prerenderedAt":1096},["ShallowReactive",2],{"navigation_docs_en":3,"-en-nonsense-bash-backrest-docker-stop-":377,"-en-nonsense-bash-backrest-docker-stop--surround":1091},[4,16,94,262,271,332],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":15},"About","i-noto-star","\u002Fen\u002Fabout","en\u002F1.about",[10],{"title":11,"path":12,"stem":13,"icon":14},"Welcome","\u002Fen\u002Fabout\u002Fwelcome","en\u002F1.about\u002F1.welcome","i-lucide-home",false,{"title":17,"icon":18,"path":19,"stem":20,"children":21,"page":15},"General","i-noto-open-book","\u002Fen\u002Fgeneral","en\u002F2.general",[22,26,44,58,76],{"title":17,"path":23,"stem":24,"icon":25},"\u002Fen\u002Fgeneral\u002Fsummary","en\u002F2.general\u002F1.summary","i-lucide-bookmark",{"title":27,"icon":28,"path":29,"stem":30,"children":31,"page":15},"Networking","i-lucide-network","\u002Fen\u002Fgeneral\u002Fnetworking","en\u002F2.general\u002F2.networking",[32,36,40],{"title":33,"path":34,"stem":35},"NAT & DHCP","\u002Fen\u002Fgeneral\u002Fnetworking\u002Fnat","en\u002F2.general\u002F2.networking\u002F1.nat",{"title":37,"path":38,"stem":39},"DNS Zone","\u002Fen\u002Fgeneral\u002Fnetworking\u002Fdns","en\u002F2.general\u002F2.networking\u002F2.dns",{"title":41,"path":42,"stem":43},"Samba","\u002Fen\u002Fgeneral\u002Fnetworking\u002Fsamba","en\u002F2.general\u002F2.networking\u002F3.samba",{"title":45,"icon":46,"path":47,"stem":48,"children":49,"page":15},"Storage","i-lucide-hard-drive","\u002Fen\u002Fgeneral\u002Fstorage","en\u002F2.general\u002F3.storage",[50,54],{"title":51,"path":52,"stem":53},"RAID","\u002Fen\u002Fgeneral\u002Fstorage\u002Fraid","en\u002F2.general\u002F3.storage\u002F1.raid",{"title":55,"path":56,"stem":57},"ZFS","\u002Fen\u002Fgeneral\u002Fstorage\u002Fzfs","en\u002F2.general\u002F3.storage\u002F2.zfs",{"title":59,"icon":60,"path":61,"stem":62,"children":63,"page":15},"Hardware","i-lucide-server","\u002Fen\u002Fgeneral\u002Fhardware","en\u002F2.general\u002F4.hardware",[64,68,72],{"title":65,"path":66,"stem":67},"The Basics","\u002Fen\u002Fgeneral\u002Fhardware\u002Fbasics","en\u002F2.general\u002F4.hardware\u002F1.basics",{"title":69,"path":70,"stem":71},"Network","\u002Fen\u002Fgeneral\u002Fhardware\u002Fnetwork","en\u002F2.general\u002F4.hardware\u002F2.network",{"title":73,"path":74,"stem":75},"The ProloNAS","\u002Fen\u002Fgeneral\u002Fhardware\u002Fprolonas","en\u002F2.general\u002F4.hardware\u002F3.prolonas",{"title":77,"icon":78,"path":79,"stem":80,"children":81,"page":15},"Linux tips for dummies","i-lucide-terminal","\u002Fen\u002Fgeneral\u002Flinux","en\u002F2.general\u002F5.linux",[82,86,90],{"title":83,"path":84,"stem":85},"Command line basics","\u002Fen\u002Fgeneral\u002Flinux\u002Fcli-basics","en\u002F2.general\u002F5.linux\u002F1.cli-basics",{"title":87,"path":88,"stem":89},"Folders and partitions","\u002Fen\u002Fgeneral\u002Flinux\u002Ffilesystem","en\u002F2.general\u002F5.linux\u002F2.filesystem",{"title":91,"path":92,"stem":93},"Handy CLI tools","\u002Fen\u002Fgeneral\u002Flinux\u002Fhandy-tools","en\u002F2.general\u002F5.linux\u002F3.handy-tools",{"title":95,"icon":96,"path":97,"stem":98,"children":99,"page":15},"Serveex","i-noto-microscope","\u002Fen\u002Fserveex","en\u002F3.serveex",[100,104,126,144,170,188,202,216,234,248],{"title":101,"path":102,"stem":103,"icon":25},"Introduction","\u002Fen\u002Fserveex\u002Fintroduction","en\u002F3.serveex\u002F1.introduction",{"title":105,"icon":106,"path":107,"stem":108,"children":109,"page":15},"Server core","i-lucide-server-cog","\u002Fen\u002Fserveex\u002Fcore","en\u002F3.serveex\u002F2.core",[110,114,118,122],{"title":111,"path":112,"stem":113},"Debian 13","\u002Fen\u002Fserveex\u002Fcore\u002Finstallation","en\u002F3.serveex\u002F2.core\u002F1.installation",{"title":115,"path":116,"stem":117},"Docker","\u002Fen\u002Fserveex\u002Fcore\u002Fdocker","en\u002F3.serveex\u002F2.core\u002F2.docker",{"title":119,"path":120,"stem":121},"Wireguard","\u002Fen\u002Fserveex\u002Fcore\u002Fwireguard","en\u002F3.serveex\u002F2.core\u002F3.wireguard",{"title":123,"path":124,"stem":125},"SWAG","\u002Fen\u002Fserveex\u002Fcore\u002Fswag","en\u002F3.serveex\u002F2.core\u002F4.swag",{"title":127,"icon":128,"path":129,"stem":130,"children":131,"page":15},"Security","i-lucide-shield","\u002Fen\u002Fserveex\u002Fsecurity","en\u002F3.serveex\u002F3.security",[132,136,140],{"title":133,"path":134,"stem":135},"Cloudflare Zero Trust","\u002Fen\u002Fserveex\u002Fsecurity\u002Fcloudflare","en\u002F3.serveex\u002F3.security\u002F2.cloudflare",{"title":137,"path":138,"stem":139},"TinyAuth","\u002Fen\u002Fserveex\u002Fsecurity\u002Ftinyauth","en\u002F3.serveex\u002F3.security\u002F3.tinyauth",{"title":141,"path":142,"stem":143},"Pocket ID","\u002Fen\u002Fserveex\u002Fsecurity\u002Fpocket-id","en\u002F3.serveex\u002F3.security\u002F4.pocket-id",{"title":145,"icon":146,"path":147,"stem":148,"children":149,"page":15},"Monitoring","i-lucide-chart-no-axes-column","\u002Fen\u002Fserveex\u002Fmonitoring","en\u002F3.serveex\u002F4.monitoring",[150,154,158,162,166],{"title":151,"path":152,"stem":153},"Uptime-Kuma","\u002Fen\u002Fserveex\u002Fmonitoring\u002Fuptime-kuma","en\u002F3.serveex\u002F4.monitoring\u002F1.uptime-kuma",{"title":155,"path":156,"stem":157},"Dozzle","\u002Fen\u002Fserveex\u002Fmonitoring\u002Fdozzle","en\u002F3.serveex\u002F4.monitoring\u002F2.dozzle",{"title":159,"path":160,"stem":161},"Speedtest Tracker","\u002Fen\u002Fserveex\u002Fmonitoring\u002Fspeedtest-tracker","en\u002F3.serveex\u002F4.monitoring\u002F3.speedtest-tracker",{"title":163,"path":164,"stem":165},"Beszel","\u002Fen\u002Fserveex\u002Fmonitoring\u002Fbeszel","en\u002F3.serveex\u002F4.monitoring\u002F4.beszel",{"title":167,"path":168,"stem":169},"UpSnap","\u002Fen\u002Fserveex\u002Fmonitoring\u002Fupsnap","en\u002F3.serveex\u002F4.monitoring\u002F5.upsnap",{"title":171,"icon":172,"path":173,"stem":174,"children":175,"page":15},"Media & Seedbox","i-lucide-list-video","\u002Fen\u002Fserveex\u002Fmedia","en\u002F3.serveex\u002F5.media",[176,180,184],{"title":177,"path":178,"stem":179},"Jellyfin","\u002Fen\u002Fserveex\u002Fmedia\u002Fjellyfin","en\u002F3.serveex\u002F5.media\u002F1.jellyfin",{"title":181,"path":182,"stem":183},"Qbittorrent","\u002Fen\u002Fserveex\u002Fmedia\u002Fqbittorrent","en\u002F3.serveex\u002F5.media\u002F2.qbittorrent",{"title":185,"path":186,"stem":187},"Automation","\u002Fen\u002Fserveex\u002Fmedia\u002Fservarr","en\u002F3.serveex\u002F5.media\u002F3.servarr",{"title":189,"icon":190,"path":191,"stem":192,"children":193,"page":15},"Cloud Drive & Photos","i-lucide-cloud-upload","\u002Fen\u002Fserveex\u002Fcloud","en\u002F3.serveex\u002F6.cloud",[194,198],{"title":195,"path":196,"stem":197},"Immich","\u002Fen\u002Fserveex\u002Fcloud\u002Fimmich","en\u002F3.serveex\u002F6.cloud\u002F1.immich",{"title":199,"path":200,"stem":201},"Nextcloud","\u002Fen\u002Fserveex\u002Fcloud\u002Fnextcloud","en\u002F3.serveex\u002F6.cloud\u002F2.nextcloud",{"title":203,"icon":204,"path":205,"stem":206,"children":207,"page":15},"File & share","i-lucide-folder-tree","\u002Fen\u002Fserveex\u002Ffiles","en\u002F3.serveex\u002F7.files",[208,212],{"title":209,"path":210,"stem":211},"File Browser Quantum","\u002Fen\u002Fserveex\u002Ffiles\u002Ffile-browser-quantum","en\u002F3.serveex\u002F7.files\u002F1.file-browser-quantum",{"title":213,"path":214,"stem":215},"Pingvin","\u002Fen\u002Fserveex\u002Ffiles\u002Fpingvin","en\u002F3.serveex\u002F7.files\u002F2.pingvin",{"title":217,"icon":218,"path":219,"stem":220,"children":221,"page":15},"Developpement","i-lucide-code-xml","\u002Fen\u002Fserveex\u002Fdevelopment","en\u002F3.serveex\u002F8.development",[222,226,230],{"title":223,"path":224,"stem":225},"Code-Server","\u002Fen\u002Fserveex\u002Fdevelopment\u002Fcode-server","en\u002F3.serveex\u002F8.development\u002F1.code-server",{"title":227,"path":228,"stem":229},"Forgejo","\u002Fen\u002Fserveex\u002Fdevelopment\u002Fforgejo","en\u002F3.serveex\u002F8.development\u002F2.forgejo",{"title":231,"path":232,"stem":233},"IT Tools","\u002Fen\u002Fserveex\u002Fdevelopment\u002Fit-tools","en\u002F3.serveex\u002F8.development\u002F3.it-tools",{"title":235,"icon":236,"path":237,"stem":238,"children":239,"page":15},"Useful Apps","i-lucide-award","\u002Fen\u002Fserveex\u002Fapps","en\u002F3.serveex\u002F9.apps",[240,244],{"title":241,"path":242,"stem":243},"Adguard Home","\u002Fen\u002Fserveex\u002Fapps\u002Fadguard","en\u002F3.serveex\u002F9.apps\u002F1.adguard",{"title":245,"path":246,"stem":247},"Vaultwarden","\u002Fen\u002Fserveex\u002Fapps\u002Fvaultwarden","en\u002F3.serveex\u002F9.apps\u002F2.vaultwarden",{"title":249,"icon":250,"path":251,"stem":252,"children":253,"page":15},"Advanced","i-lucide-flask-conical","\u002Fen\u002Fserveex\u002Fadvanced","en\u002F3.serveex\u002F91.advanced",[254,258],{"title":255,"path":256,"stem":257},"Authentik","\u002Fen\u002Fserveex\u002Fadvanced\u002Fauthentik","en\u002F3.serveex\u002F91.advanced\u002F1.authentik",{"title":259,"path":260,"stem":261},"Arcane","\u002Fen\u002Fserveex\u002Fadvanced\u002Farcane","en\u002F3.serveex\u002F91.advanced\u002F2.arcane",{"title":263,"icon":264,"path":265,"stem":266,"children":267,"page":15},"Stockeex","i-noto-computer-disk","\u002Fen\u002Fstockeex","en\u002F4.stockeex",[268],{"title":101,"path":269,"stem":270,"icon":25},"\u002Fen\u002Fstockeex\u002Fintroduction","en\u002F4.stockeex\u002F1.introduction",{"title":272,"icon":273,"path":274,"stem":275,"children":276,"page":15},"My nonsense","i-noto-test-tube","\u002Fen\u002Fnonsense","en\u002F5.nonsense",[277,280,302],{"title":272,"path":278,"stem":279,"icon":25},"\u002Fen\u002Fnonsense\u002Fsummary","en\u002F5.nonsense\u002F1.summary",{"title":281,"icon":282,"path":283,"stem":284,"children":285,"page":15},"Python","i-lucide-file-code-2","\u002Fen\u002Fnonsense\u002Fpython","en\u002F5.nonsense\u002F2.python",[286,290,294,298],{"title":287,"path":288,"stem":289},"Nvidia Stock Bot","\u002Fen\u002Fnonsense\u002Fpython\u002Fnvidia-stock-bot","en\u002F5.nonsense\u002F2.python\u002F1.nvidia-stock-bot",{"title":291,"path":292,"stem":293},"Adguard CIDRE","\u002Fen\u002Fnonsense\u002Fpython\u002Fadguard-cidre","en\u002F5.nonsense\u002F2.python\u002F2.adguard-cidre",{"title":295,"path":296,"stem":297},"Lumeex","\u002Fen\u002Fnonsense\u002Fpython\u002Flumeex","en\u002F5.nonsense\u002F2.python\u002F3.lumeex",{"title":299,"path":300,"stem":301},"Instameex","\u002Fen\u002Fnonsense\u002Fpython\u002Finstameex","en\u002F5.nonsense\u002F2.python\u002F4.instameex",{"title":303,"icon":304,"path":305,"stem":306,"children":307,"page":15},"Bash","i-lucide-file-terminal","\u002Fen\u002Fnonsense\u002Fbash","en\u002F5.nonsense\u002F3.bash",[308,312,316,320,324,328],{"title":309,"path":310,"stem":311},"Servarr corrector","\u002Fen\u002Fnonsense\u002Fbash\u002Fservarr-duplicates","en\u002F5.nonsense\u002F3.bash\u002F1.servarr-duplicates",{"title":313,"path":314,"stem":315},"LUKS Backup","\u002Fen\u002Fnonsense\u002Fbash\u002Fluks-backup","en\u002F5.nonsense\u002F3.bash\u002F2.luks-backup",{"title":317,"path":318,"stem":319},"Socat Proxy","\u002Fen\u002Fnonsense\u002Fbash\u002Fsocat-proxy","en\u002F5.nonsense\u002F3.bash\u002F3.socat-proxy",{"title":321,"path":322,"stem":323},"HotDisk","\u002Fen\u002Fnonsense\u002Fbash\u002Fhotdisk","en\u002F5.nonsense\u002F3.bash\u002F4.hotdisk",{"title":325,"path":326,"stem":327},"Backrest Docker Stop","\u002Fen\u002Fnonsense\u002Fbash\u002Fbackrest-docker-stop","en\u002F5.nonsense\u002F3.bash\u002F5.backrest-docker-stop",{"title":329,"path":330,"stem":331},"rm Confirmation Guard","\u002Fen\u002Fnonsense\u002Fbash\u002Frm-confirmation","en\u002F5.nonsense\u002F3.bash\u002F6.rm-confirmation",{"title":333,"icon":334,"path":335,"stem":336,"children":337,"page":15},"Recycled","i-noto-recycling-symbol","\u002Fen\u002Frecycled","en\u002F6.recycled",[338,341,355],{"title":333,"path":339,"stem":340,"icon":25},"\u002Fen\u002Frecycled\u002Fsummary","en\u002F6.recycled\u002F1.summary",{"title":342,"icon":343,"path":344,"stem":345,"children":346,"page":15},"Deprecated","i-lucide-trash-2","\u002Fen\u002Frecycled\u002Fdeprecated","en\u002F6.recycled\u002F2.deprecated",[347,351],{"title":348,"path":349,"stem":350},"Wireguard 14","\u002Fen\u002Frecycled\u002Fdeprecated\u002Fwireguard-14","en\u002F6.recycled\u002F2.deprecated\u002F1.wireguard-14",{"title":352,"path":353,"stem":354},"File Browser","\u002Fen\u002Frecycled\u002Fdeprecated\u002Ffile-browser","en\u002F6.recycled\u002F2.deprecated\u002F2.file-browser",{"title":356,"icon":357,"path":358,"stem":359,"children":360,"page":15},"Alternatives","i-lucide-arrow-left-right","\u002Fen\u002Frecycled\u002Falternatives","en\u002F6.recycled\u002F3.alternatives",[361,365,369,373],{"title":362,"path":363,"stem":364},"Plex","\u002Fen\u002Frecycled\u002Falternatives\u002Fplex","en\u002F6.recycled\u002F3.alternatives\u002F1.plex",{"title":366,"path":367,"stem":368},"Qbittorrent for Plex","\u002Fen\u002Frecycled\u002Falternatives\u002Fqbittorrent-for-plex","en\u002F6.recycled\u002F3.alternatives\u002F2.qbittorrent for plex",{"title":370,"path":371,"stem":372},"Servarr for Plex","\u002Fen\u002Frecycled\u002Falternatives\u002Fservarr-for-plex","en\u002F6.recycled\u002F3.alternatives\u002F3.servarr for plex",{"title":374,"path":375,"stem":376},"Gitea","\u002Fen\u002Frecycled\u002Falternatives\u002Fgitea","en\u002F6.recycled\u002F3.alternatives\u002F4.gitea",{"id":378,"title":325,"body":379,"contributors":1083,"description":1085,"extension":1086,"hideCopyPage":15,"hideHeader":15,"hideToc":15,"links":1087,"meta":1088,"navigation":654,"path":326,"seo":1089,"stem":327,"__hash__":1090},"docs_en\u002Fen\u002F5.nonsense\u002F3.bash\u002F5.backrest-docker-stop.md",{"type":380,"value":381,"toc":1078},"minimark",[382,390,406,409,415,444,449,468,781,784,788,803,1011,1015,1027,1068,1074],[383,384],"ellipsis",{"blur":385,"left":386,"top":387,"width":388,"z-index":389},"140px","0px","10rem","40rem","60",[391,392,393,400,401,405],"p",{},[394,395,399],"a",{"href":396,"rel":397},"https:\u002F\u002Fgithub.com\u002Fgarethgeorge\u002Fbackrest",[398],"nofollow","Backrest"," is a fantastic backup tool. In the case of ",[394,402,95],{"href":403,"rel":404},"https:\u002F\u002Fdocu.djeex.fr\u002Fen\u002Fserveex\u002Fintroduction",[398],", most of the data that needs to be backed up consists of containers, and those containers often include databases.",[391,407,408],{},"The problem? You can’t safely back up a database while it’s running. There are plenty of complex solutions involving database dumps, but often the simplest method is to stop the containers, perform the backup, and then restart them.",[391,410,411,414],{},[412,413,399],"strong",{}," doesn’t natively provide this functionality, but it does allow the execution of custom scripts triggered by events, for example, at the start and end of a backup plan. Our goal is to stop the containers whose databases need to be backed up when the backup plan starts, and restart them when the backup plan finishes.To achieve this, we’ll need a small Bash script and a secure connection between Backrest and the Docker socket, to enable the following sequence:",[416,417,418,422,425,432,435,438,441],"ul",{},[419,420,421],"li",{},"The backup plan starts",[419,423,424],{},"The event triggers the execution of a custom script",[419,426,427,428],{},"The script contacts Docker and retrieves a list of containers labeled ",[429,430,431],"code",{},"backrest.backup.stop=true",[419,433,434],{},"It stops those containers",[419,436,437],{},"The backup plan completes",[419,439,440],{},"The event triggers another custom script",[419,442,443],{},"The script contacts Docker again, retrieves the same list, and restarts those containers",[445,446,448],"h2",{"id":447},"securely-connecting-backrest-and-docker","Securely Connecting Backrest and Docker",[391,450,451,452,454,455,460,461,464,465,467],{},"To allow ",[412,453,399],{}," to communicate securely with Docker, we’ll use ",[394,456,459],{"href":457,"rel":458},"https:\u002F\u002Fgithub.com\u002Flinuxserver\u002Fdocker-socket-proxy",[398],"Docker Socket Proxy",".",[462,463],"br",{},"\nThis avoids exposing the full Docker socket and grants only the necessary permissions.",[462,466],{},"\nHere’s an example Docker stack:",[469,470,476],"pre",{"className":471,"code":472,"filename":473,"language":474,"meta":475,"style":475},"language-yaml shiki shiki-themes github-dark material-theme github-dark","---\nservices:\n  backrest:\n    image: garethgeorge\u002Fbackrest:latest\n    container_name: backrest\n    hostname: backrest\n    security_opt:\n      - no-new-privileges:true\n    volumes:\n      - ...  # your volumes\n    environment:\n      - ...  # your environment variables\n      - DOCKER_HOST=tcp:\u002F\u002Fsocket-proxy-backrest:2375\n    restart: unless-stopped\n    ports:\n      - ...  # your ports\n    depends_on:\n      - socket-proxy\n\n  socket-proxy:\n    image: lscr.io\u002Flinuxserver\u002Fsocket-proxy:latest\n    container_name: socket-proxy-backrest\n    security_opt:\n      - no-new-privileges:true\n    environment:\n      - CONTAINERS=1\n      - ALLOW_START=1\n      - ALLOW_STOP=1\n    volumes:\n      - \u002Fvar\u002Frun\u002Fdocker.sock:\u002Fvar\u002Frun\u002Fdocker.sock:ro\n    restart: unless-stopped\n    read_only: true\n    tmpfs:\n      - \u002Frun\n","compose.yaml","yaml","",[429,477,478,487,498,506,519,530,540,548,557,565,578,586,596,604,615,623,633,641,649,656,664,674,684,691,698,705,713,721,729,736,744,753,765,773],{"__ignoreMap":475},[479,480,483],"span",{"class":481,"line":482},"line",1,[479,484,486],{"class":485},"sEgDM","---\n",[479,488,490,494],{"class":481,"line":489},2,[479,491,493],{"class":492},"sRuoG","services",[479,495,497],{"class":496},"s8jd1",":\n",[479,499,501,504],{"class":481,"line":500},3,[479,502,503],{"class":492},"  backrest",[479,505,497],{"class":496},[479,507,509,512,515],{"class":481,"line":508},4,[479,510,511],{"class":492},"    image",[479,513,514],{"class":496},":",[479,516,518],{"class":517},"s11XM"," garethgeorge\u002Fbackrest:latest\n",[479,520,522,525,527],{"class":481,"line":521},5,[479,523,524],{"class":492},"    container_name",[479,526,514],{"class":496},[479,528,529],{"class":517}," backrest\n",[479,531,533,536,538],{"class":481,"line":532},6,[479,534,535],{"class":492},"    hostname",[479,537,514],{"class":496},[479,539,529],{"class":517},[479,541,543,546],{"class":481,"line":542},7,[479,544,545],{"class":492},"    security_opt",[479,547,497],{"class":496},[479,549,551,554],{"class":481,"line":550},8,[479,552,553],{"class":496},"      -",[479,555,556],{"class":517}," no-new-privileges:true\n",[479,558,560,563],{"class":481,"line":559},9,[479,561,562],{"class":492},"    volumes",[479,564,497],{"class":496},[479,566,568,570,574],{"class":481,"line":567},10,[479,569,553],{"class":496},[479,571,573],{"class":572},"swwWl"," ...",[479,575,577],{"class":576},"sDvJj","  # your volumes\n",[479,579,581,584],{"class":481,"line":580},11,[479,582,583],{"class":492},"    environment",[479,585,497],{"class":496},[479,587,589,591,593],{"class":481,"line":588},12,[479,590,553],{"class":496},[479,592,573],{"class":572},[479,594,595],{"class":576},"  # your environment variables\n",[479,597,599,601],{"class":481,"line":598},13,[479,600,553],{"class":496},[479,602,603],{"class":517}," DOCKER_HOST=tcp:\u002F\u002Fsocket-proxy-backrest:2375\n",[479,605,607,610,612],{"class":481,"line":606},14,[479,608,609],{"class":492},"    restart",[479,611,514],{"class":496},[479,613,614],{"class":517}," unless-stopped\n",[479,616,618,621],{"class":481,"line":617},15,[479,619,620],{"class":492},"    ports",[479,622,497],{"class":496},[479,624,626,628,630],{"class":481,"line":625},16,[479,627,553],{"class":496},[479,629,573],{"class":572},[479,631,632],{"class":576},"  # your ports\n",[479,634,636,639],{"class":481,"line":635},17,[479,637,638],{"class":492},"    depends_on",[479,640,497],{"class":496},[479,642,644,646],{"class":481,"line":643},18,[479,645,553],{"class":496},[479,647,648],{"class":517}," socket-proxy\n",[479,650,652],{"class":481,"line":651},19,[479,653,655],{"emptyLinePlaceholder":654},true,"\n",[479,657,659,662],{"class":481,"line":658},20,[479,660,661],{"class":492},"  socket-proxy",[479,663,497],{"class":496},[479,665,667,669,671],{"class":481,"line":666},21,[479,668,511],{"class":492},[479,670,514],{"class":496},[479,672,673],{"class":517}," lscr.io\u002Flinuxserver\u002Fsocket-proxy:latest\n",[479,675,677,679,681],{"class":481,"line":676},22,[479,678,524],{"class":492},[479,680,514],{"class":496},[479,682,683],{"class":517}," socket-proxy-backrest\n",[479,685,687,689],{"class":481,"line":686},23,[479,688,545],{"class":492},[479,690,497],{"class":496},[479,692,694,696],{"class":481,"line":693},24,[479,695,553],{"class":496},[479,697,556],{"class":517},[479,699,701,703],{"class":481,"line":700},25,[479,702,583],{"class":492},[479,704,497],{"class":496},[479,706,708,710],{"class":481,"line":707},26,[479,709,553],{"class":496},[479,711,712],{"class":517}," CONTAINERS=1\n",[479,714,716,718],{"class":481,"line":715},27,[479,717,553],{"class":496},[479,719,720],{"class":517}," ALLOW_START=1\n",[479,722,724,726],{"class":481,"line":723},28,[479,725,553],{"class":496},[479,727,728],{"class":517}," ALLOW_STOP=1\n",[479,730,732,734],{"class":481,"line":731},29,[479,733,562],{"class":492},[479,735,497],{"class":496},[479,737,739,741],{"class":481,"line":738},30,[479,740,553],{"class":496},[479,742,743],{"class":517}," \u002Fvar\u002Frun\u002Fdocker.sock:\u002Fvar\u002Frun\u002Fdocker.sock:ro\n",[479,745,747,749,751],{"class":481,"line":746},31,[479,748,609],{"class":492},[479,750,514],{"class":496},[479,752,614],{"class":517},[479,754,756,759,761],{"class":481,"line":755},32,[479,757,758],{"class":492},"    read_only",[479,760,514],{"class":496},[479,762,764],{"class":763},"s08Ry"," true\n",[479,766,768,771],{"class":481,"line":767},33,[479,769,770],{"class":492},"    tmpfs",[479,772,497],{"class":496},[479,774,776,778],{"class":481,"line":775},34,[479,777,553],{"class":496},[479,779,780],{"class":517}," \u002Frun\n",[391,782,783],{},"With this setup, Backrest can communicate with Docker safely and securely.",[445,785,787],{"id":786},"the-scripts","The Scripts",[391,789,790,791,793,794,798,799,802],{},"Below are the scripts to use for ",[412,792,399],{},"’s ",[795,796,797],"em",{},"start"," and ",[795,800,801],{},"end"," backup events.",[804,805,806,924],"code-group",{},[469,807,812],{"className":808,"code":809,"filename":810,"language":811,"meta":475,"style":475},"language-sh shiki shiki-themes github-dark material-theme github-dark","#!\u002Fusr\u002Fbin\u002Fenv bash\n\nBACKUP_LABEL=\"backrest.backup.stop=true\"\nBACKUP_CONTAINERS=$(docker ps -aqf \"label=$BACKUP_LABEL\")\nfor BC in $BACKUP_CONTAINERS\ndo\n    docker stop \"$BC\"\ndone\nsleep 10\n","Stop","sh",[429,813,814,819,823,842,876,891,896,911,916],{"__ignoreMap":475},[479,815,816],{"class":481,"line":482},[479,817,818],{"class":576},"#!\u002Fusr\u002Fbin\u002Fenv bash\n",[479,820,821],{"class":481,"line":489},[479,822,655],{"emptyLinePlaceholder":654},[479,824,825,829,833,837,839],{"class":481,"line":500},[479,826,828],{"class":827},"slcoZ","BACKUP_LABEL",[479,830,832],{"class":831},"sJPTy","=",[479,834,836],{"class":835},"s8K8j","\"",[479,838,431],{"class":517},[479,840,841],{"class":835},"\"\n",[479,843,844,847,849,852,855,858,862,865,868,871,873],{"class":481,"line":508},[479,845,846],{"class":827},"BACKUP_CONTAINERS",[479,848,832],{"class":831},[479,850,851],{"class":496},"$(",[479,853,854],{"class":485},"docker",[479,856,857],{"class":517}," ps",[479,859,861],{"class":860},"sJWha"," -aqf",[479,863,864],{"class":835}," \"",[479,866,867],{"class":517},"label=",[479,869,870],{"class":827},"$BACKUP_LABEL",[479,872,836],{"class":835},[479,874,875],{"class":496},")\n",[479,877,878,882,885,888],{"class":481,"line":521},[479,879,881],{"class":880},"sJLGa","for",[479,883,884],{"class":827}," BC ",[479,886,887],{"class":880},"in",[479,889,890],{"class":827}," $BACKUP_CONTAINERS\n",[479,892,893],{"class":481,"line":532},[479,894,895],{"class":880},"do\n",[479,897,898,901,904,906,909],{"class":481,"line":542},[479,899,900],{"class":485},"    docker",[479,902,903],{"class":517}," stop",[479,905,864],{"class":835},[479,907,908],{"class":827},"$BC",[479,910,841],{"class":835},[479,912,913],{"class":481,"line":550},[479,914,915],{"class":880},"done\n",[479,917,918,921],{"class":481,"line":559},[479,919,920],{"class":485},"sleep",[479,922,923],{"class":572}," 10\n",[469,925,928],{"className":808,"code":926,"filename":927,"language":811,"meta":475,"style":475},"#!\u002Fusr\u002Fbin\u002Fenv bash\n\nBACKUP_LABEL=\"backrest.backup.stop=true\"\nBACKUP_CONTAINERS=$(docker ps -aqf \"label=$BACKUP_LABEL\")\nfor BC in $BACKUP_CONTAINERS\ndo\n    docker start \"$BC\"\ndone\nsleep 10\n","Start",[429,929,930,934,938,950,974,984,988,1001,1005],{"__ignoreMap":475},[479,931,932],{"class":481,"line":482},[479,933,818],{"class":576},[479,935,936],{"class":481,"line":489},[479,937,655],{"emptyLinePlaceholder":654},[479,939,940,942,944,946,948],{"class":481,"line":500},[479,941,828],{"class":827},[479,943,832],{"class":831},[479,945,836],{"class":835},[479,947,431],{"class":517},[479,949,841],{"class":835},[479,951,952,954,956,958,960,962,964,966,968,970,972],{"class":481,"line":508},[479,953,846],{"class":827},[479,955,832],{"class":831},[479,957,851],{"class":496},[479,959,854],{"class":485},[479,961,857],{"class":517},[479,963,861],{"class":860},[479,965,864],{"class":835},[479,967,867],{"class":517},[479,969,870],{"class":827},[479,971,836],{"class":835},[479,973,875],{"class":496},[479,975,976,978,980,982],{"class":481,"line":521},[479,977,881],{"class":880},[479,979,884],{"class":827},[479,981,887],{"class":880},[479,983,890],{"class":827},[479,985,986],{"class":481,"line":532},[479,987,895],{"class":880},[479,989,990,992,995,997,999],{"class":481,"line":542},[479,991,900],{"class":485},[479,993,994],{"class":517}," start",[479,996,864],{"class":835},[479,998,908],{"class":827},[479,1000,841],{"class":835},[479,1002,1003],{"class":481,"line":550},[479,1004,915],{"class":880},[479,1006,1007,1009],{"class":481,"line":559},[479,1008,920],{"class":485},[479,1010,923],{"class":572},[445,1012,1014],{"id":1013},"the-label","The Label",[391,1016,1017,1018,1020,1021,1023,1024,1026],{},"Once the scripts are in place and configured for the proper ",[412,1019,399],{}," hooks, you just need to add the label ",[429,1022,431],{}," to the ",[429,1025,473],{}," files of the containers that should stop and restart during backups:",[469,1028,1030],{"className":471,"code":1029,"filename":473,"language":474,"meta":475,"style":475},"---\nservices:\n  your_service:\n    ...\n    labels:\n      - backrest.backup.stop=true\n",[429,1031,1032,1036,1042,1049,1054,1061],{"__ignoreMap":475},[479,1033,1034],{"class":481,"line":482},[479,1035,486],{"class":485},[479,1037,1038,1040],{"class":481,"line":489},[479,1039,493],{"class":492},[479,1041,497],{"class":496},[479,1043,1044,1047],{"class":481,"line":500},[479,1045,1046],{"class":492},"  your_service",[479,1048,497],{"class":496},[479,1050,1051],{"class":481,"line":508},[479,1052,1053],{"class":572},"    ...\n",[479,1055,1056,1059],{"class":481,"line":521},[479,1057,1058],{"class":492},"    labels",[479,1060,497],{"class":496},[479,1062,1063,1065],{"class":481,"line":532},[479,1064,553],{"class":496},[479,1066,1067],{"class":517}," backrest.backup.stop=true\n",[391,1069,1070,1071,1073],{},"And that’s it!",[462,1072],{},"\nAt the next backup, all containers with the correct label will automatically stop during the backup and restart once it’s finished.",[1075,1076,1077],"style",{},"html pre.shiki code .sEgDM, html code.shiki .sEgDM{--shiki-light:#B392F0;--shiki-default:#FFCB6B;--shiki-dark:#B392F0}html pre.shiki code .sRuoG, html code.shiki .sRuoG{--shiki-light:#85E89D;--shiki-default:#F07178;--shiki-dark:#85E89D}html pre.shiki code .s8jd1, html code.shiki .s8jd1{--shiki-light:#E1E4E8;--shiki-default:#89DDFF;--shiki-dark:#E1E4E8}html pre.shiki code .s11XM, html code.shiki .s11XM{--shiki-light:#9ECBFF;--shiki-default:#C3E88D;--shiki-dark:#9ECBFF}html pre.shiki code .swwWl, html code.shiki .swwWl{--shiki-light:#79B8FF;--shiki-default:#F78C6C;--shiki-dark:#79B8FF}html pre.shiki code .sDvJj, html code.shiki .sDvJj{--shiki-light:#6A737D;--shiki-light-font-style:inherit;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .s08Ry, html code.shiki .s08Ry{--shiki-light:#79B8FF;--shiki-default:#FF9CAC;--shiki-dark:#79B8FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .slcoZ, html code.shiki .slcoZ{--shiki-light:#E1E4E8;--shiki-default:#EEFFFF;--shiki-dark:#E1E4E8}html pre.shiki code .sJPTy, html code.shiki .sJPTy{--shiki-light:#F97583;--shiki-default:#89DDFF;--shiki-dark:#F97583}html pre.shiki code .s8K8j, html code.shiki .s8K8j{--shiki-light:#9ECBFF;--shiki-default:#89DDFF;--shiki-dark:#9ECBFF}html pre.shiki code .sJWha, html code.shiki .sJWha{--shiki-light:#79B8FF;--shiki-default:#C3E88D;--shiki-dark:#79B8FF}html pre.shiki code .sJLGa, html code.shiki .sJLGa{--shiki-light:#F97583;--shiki-light-font-style:inherit;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}",{"title":475,"searchDepth":489,"depth":489,"links":1079},[1080,1081,1082],{"id":447,"depth":489,"text":448},{"id":786,"depth":489,"text":787},{"id":1013,"depth":489,"text":1014},[1084],"Djeex","A bash script that stops Docker containers before a Backrest backup runs and restarts them after, ensuring safe database backups without complex dumps.","md",null,{},{"title":325,"description":1085},"m5dfofBTISeh2yZwi6JFdaI8jgk6EJnwYbBypg8xiKY",[1092,1094],{"title":321,"path":322,"stem":323,"description":1093,"children":-1},"A bash script that monitors hard drive temperatures and automatically shuts down the server when disks stay above a safe threshold for too long.",{"title":329,"path":330,"stem":331,"description":1095,"children":-1},"A small Bash function that wraps sudo and asks for confirmation before running rm, so a typo doesn't delete files owned by root.",1788645859627]