{"id":48403,"date":"2025-02-08T08:24:34","date_gmt":"2025-02-08T08:24:34","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=48403"},"modified":"2025-07-12T05:38:44","modified_gmt":"2025-07-12T05:38:44","slug":"docker-wait","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/docker-wait\/","title":{"rendered":"Docker commands Guide &#8211; docker wait with examples"},"content":{"rendered":"\n<p>Here\u2019s a <strong>complete tutorial<\/strong> on <code>docker wait<\/code>, covering <strong>what it does<\/strong>, <strong>examples<\/strong>, and <strong>use cases<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>What is <code>docker wait<\/code>?<\/strong><\/h2>\n\n\n\n<p><code>docker wait<\/code> is a Docker command that <strong>blocks until a container stops<\/strong> and then <strong>returns the container\u2019s exit code<\/strong>. It\u2019s useful for <strong>synchronizing tasks<\/strong>, <strong>monitoring container completion<\/strong>, and <strong>handling exit status<\/strong> in scripts or automation processes.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Key Features:<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Waits for one or more containers to <strong>stop<\/strong>.<\/li>\n\n\n\n<li>Returns the <strong>exit status code<\/strong> of the container\u2019s main process.<\/li>\n\n\n\n<li>Ideal for <strong>scripting and automation<\/strong>, especially when you need to act based on the container\u2019s success or failure.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Basic Syntax<\/strong><\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">docker<\/span> <span class=\"hljs-selector-tag\">wait<\/span> <span class=\"hljs-selector-tag\">CONTAINER<\/span> <span class=\"hljs-selector-attr\">&#91;CONTAINER...]<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\"><strong>Arguments:<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>CONTAINER<\/code>: The name or ID of the container. You can specify multiple containers.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Examples of <code>docker wait<\/code><\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>1. Wait for a Single Container to Stop<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">docker wait my_container\n<\/code><\/span><\/pre>\n\n\n<p>This blocks until <code>my_container<\/code> stops and then returns its exit code.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>2. Wait for a Container by ID<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">docker wait a1b2c3d4e5f6\n<\/code><\/span><\/pre>\n\n\n<p>This waits for the container with ID <code>a1b2c3d4e5f6<\/code> to stop.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>3. Wait for Multiple Containers<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">docker wait container1 container2 container3\n<\/code><\/span><\/pre>\n\n\n<p>This waits for all specified containers to stop and returns their exit codes in the order they are specified.<\/p>\n\n\n\n<p><strong>Example Output:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">0\n1\n137\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>4. Wait for a Container in a Script<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\">#!\/bin\/bash<\/span>\ndocker run --name my_temp_container ubuntu sleep <span class=\"hljs-number\">10<\/span> &amp;\ndocker wait my_temp_container\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"my_temp_container has stopped.\"<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>This script waits for <code>my_temp_container<\/code> to stop and then prints a message.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>5. Check the Exit Code of a Container<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">exit_code=$(docker wait my_container)\necho <span class=\"hljs-string\">\"Container exited with code: $exit_code\"<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>This captures the container\u2019s exit code in a variable for further use.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>6. Wait for the Last Created Container<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">docker wait $(docker ps -lq)\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>This waits for the last created container to stop.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>7. Use in a CI\/CD Pipeline<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">docker run --name test_container my_app:latest\ndocker wait test_container\n<span class=\"hljs-keyword\">if<\/span> &#91; $? -eq <span class=\"hljs-number\">0<\/span> ]; then\n  <span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Container completed successfully.\"<\/span>\n<span class=\"hljs-keyword\">else<\/span>\n  <span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Container failed.\"<\/span>\nfi\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In this example, <code>docker wait<\/code> checks the exit code and performs an action based on success or failure.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>8. Handle Parallel Containers<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">docker run --name job1 ubuntu sleep <span class=\"hljs-number\">5<\/span> &amp;\ndocker run --name job2 ubuntu sleep <span class=\"hljs-number\">10<\/span> &amp;\ndocker wait job1 job2\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Both containers have stopped.\"<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>This waits for both containers (<code>job1<\/code> and <code>job2<\/code>) to stop.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Use Cases for <code>docker wait<\/code><\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>1. Synchronization in Automation Scripts<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Wait for containers to finish before moving to the next task.<\/li>\n\n\n\n<li>Example: <strong>Run tests<\/strong> in a container and only proceed if they pass.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>2. Monitoring Container Completion<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Monitor batch jobs or background tasks and act based on their exit status.<\/li>\n\n\n\n<li>Example: Process large data files in a container and only continue if the job completes successfully.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>3. CI\/CD Pipelines<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use <code>docker wait<\/code> to ensure that tests or builds inside containers have finished before deploying.<\/li>\n\n\n\n<li>Example: In a CI pipeline, wait for a containerized test runner to finish and act on its result.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>4. Error Handling and Recovery<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Check the <strong>exit status code<\/strong> of a container to detect failures and trigger recovery actions.<\/li>\n\n\n\n<li>Example: Restart a service if a container exits with a non-zero code.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>5. Running Multiple Dependent Containers<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Wait for a dependent service to stop before starting the next one.<\/li>\n\n\n\n<li>Example: Wait for a <strong>database migration container<\/strong> to finish before starting the main app.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>List of Common <code>docker wait<\/code> Commands<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th><strong>Command<\/strong><\/th><th><strong>Description<\/strong><\/th><\/tr><\/thead><tbody><tr><td><code>docker wait my_container<\/code><\/td><td>Wait for a single container to stop<\/td><\/tr><tr><td><code>docker wait container1 container2<\/code><\/td><td>Wait for multiple containers to stop<\/td><\/tr><tr><td><code>docker wait a1b2c3d4e5f6<\/code><\/td><td>Wait for a container by its ID<\/td><\/tr><tr><td><code>docker wait $(docker ps -lq)<\/code><\/td><td>Wait for the last created container<\/td><\/tr><tr><td><code>docker run --name temp ubuntu sleep 5 &amp; docker wait temp<\/code><\/td><td>Run a container and wait for it to finish<\/td><\/tr><tr><td><code>exit_code=$(docker wait my_container)<\/code><\/td><td>Capture the container\u2019s exit code<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Best Practices for Using <code>docker wait<\/code>:<\/strong><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Use in automation scripts<\/strong> to manage container completion and handle exit statuses.<\/li>\n\n\n\n<li><strong>Combine with <code>docker logs<\/code><\/strong> to inspect why a container stopped.<\/li>\n\n\n\n<li><strong>Monitor exit codes<\/strong> and trigger appropriate actions for success or failure.<\/li>\n\n\n\n<li><strong>Avoid blocking unnecessarily<\/strong>\u2014use it only when you need to wait for container completion.<\/li>\n\n\n\n<li><strong>Combine with <code>docker run --rm<\/code><\/strong> for temporary containers that clean up automatically after completion.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Common Errors and Solutions<\/strong><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>&#8220;No such container&#8221;<\/strong><br>\u2192 Ensure the container exists and has not been removed. Check with <code>docker ps -a<\/code>.<\/li>\n\n\n\n<li><strong>&#8220;Container is still running&#8221; (No immediate output)<\/strong><br>\u2192 This is expected behavior; <code>docker wait<\/code> will block until the container stops.<\/li>\n\n\n\n<li><strong>Exit Code is Non-Zero<\/strong><br>\u2192 Check the container logs (<code>docker logs my_container<\/code>) to identify the cause of failure.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Combining <code>docker wait<\/code> with Other Commands<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Run, Wait, and Remove a Container<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">docker run --rm --name temp_container ubuntu sleep 10 &amp;\ndocker wait temp_container\n<\/code><\/span><\/pre>\n\n\n<h3 class=\"wp-block-heading\"><strong>Log the Output and Check Exit Code<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">docker run --name my_app my_image\ndocker logs my_app\nexit_code=$(docker wait my_app)\necho <span class=\"hljs-string\">\"Exit code: $exit_code\"<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Here\u2019s a complete tutorial on docker wait, covering what it does, examples, and use cases. What is docker wait? docker wait is a Docker command that blocks until a container&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[4862],"tags":[],"class_list":["post-48403","post","type-post","status-publish","format-standard","hentry","category-docker"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/48403","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=48403"}],"version-history":[{"count":2,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/48403\/revisions"}],"predecessor-version":[{"id":48405,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/48403\/revisions\/48405"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=48403"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=48403"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=48403"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}