{"id":48425,"date":"2025-02-08T08:31:37","date_gmt":"2025-02-08T08:31:37","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=48425"},"modified":"2025-07-12T05:38:42","modified_gmt":"2025-07-12T05:38:42","slug":"docker-commit","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/docker-commit\/","title":{"rendered":"Docker commands Guide &#8211; docker commit with examples"},"content":{"rendered":"\n<p>Here\u2019s a <strong>complete tutorial<\/strong> on <code>docker commit<\/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 commit<\/code>?<\/strong><\/h2>\n\n\n\n<p><code>docker commit<\/code> is a Docker command used to <strong>create a new image<\/strong> from an <strong>existing container\u2019s state<\/strong>. This allows you to save the current state of a container, including its file system and configuration, as a reusable image.<\/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>Creates a <strong>new Docker image<\/strong> from a modified or running container.<\/li>\n\n\n\n<li>Useful for <strong>snapshotting<\/strong> the container state.<\/li>\n\n\n\n<li>Allows for <strong>quick prototyping<\/strong> or <strong>manual image creation<\/strong> without a <code>Dockerfile<\/code>.<\/li>\n\n\n\n<li>Supports adding <strong>custom metadata<\/strong> (author, message).<\/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\">commit<\/span> <span class=\"hljs-selector-attr\">&#91;OPTIONS]<\/span> <span class=\"hljs-selector-tag\">CONTAINER<\/span> <span class=\"hljs-selector-tag\">IMAGE<\/span><span class=\"hljs-selector-attr\">&#91;:TAG]<\/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>Common Options:<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>-a<\/code>, <code>--author<\/code>: Set the image author.<\/li>\n\n\n\n<li><code>-m<\/code>, <code>--message<\/code>: Add a commit message.<\/li>\n\n\n\n<li><code>-p<\/code>, <code>--pause<\/code>: Pause the container during commit (default: true).<\/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 commit<\/code><\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>1. Create an Image from a Running Container<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" 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\">commit<\/span> <span class=\"hljs-selector-tag\">my_container<\/span> <span class=\"hljs-selector-tag\">my_new_image<\/span><span class=\"hljs-selector-pseudo\">:latest<\/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\">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<p>This creates a new image named <code>my_new_image:latest<\/code> from <code>my_container<\/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. Add an Author and Message<\/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\">docker commit -a <span class=\"hljs-string\">\"John Doe\"<\/span> -m <span class=\"hljs-string\">\"Updated with new configurations\"<\/span> my_container my_image:v1\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 sets <code>John Doe<\/code> as the image author and adds a commit 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>3. Create an Image Without Pausing the 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 commit --pause=<span class=\"hljs-literal\">false<\/span> my_container my_image:latest\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 commits the container without pausing it, which is useful for real-time services.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>4. Create an Image from a Stopped Container<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">docker commit stopped_container my_backup_image\n<\/code><\/span><\/pre>\n\n\n<p>You can commit a stopped container to create a backup image.<\/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. Use the Container ID Instead of the Name<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" 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\">commit<\/span> <span class=\"hljs-selector-tag\">a1b2c3d4e5f6<\/span> <span class=\"hljs-selector-tag\">my_custom_image<\/span><span class=\"hljs-selector-pseudo\">:dev<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><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<p>This commits the container with ID <code>a1b2c3d4e5f6<\/code> to <code>my_custom_image:dev<\/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>6. Automate Commit with a Script<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-meta\">#!\/bin\/bash<\/span>\ndocker commit -a <span class=\"hljs-string\">\"DevOps Team\"<\/span> -m <span class=\"hljs-string\">\"Nightly snapshot\"<\/span> my_app nightly_snapshot:$(date +%Y%m%d)\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><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 script creates a snapshot image with the current date as the tag.<\/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. Create a Base Image with Pre-Installed Dependencies<\/strong><\/h3>\n\n\n\n<p>If you have a container with installed software or dependencies:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" 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\">commit<\/span> <span class=\"hljs-selector-tag\">my_python_container<\/span> <span class=\"hljs-selector-tag\">python_base<\/span><span class=\"hljs-selector-pseudo\">:latest<\/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\">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<p>This saves the container state as a base image for future Python projects.<\/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. Export Configuration Changes<\/strong><\/h3>\n\n\n\n<p>After changing configuration files inside a running container:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" 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\">commit<\/span> <span class=\"hljs-selector-tag\">my_nginx_container<\/span> <span class=\"hljs-selector-tag\">nginx_custom<\/span><span class=\"hljs-selector-pseudo\">:1.0<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><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<p>This creates an image with your customized NGINX configuration.<\/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 commit<\/code><\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>1. Snapshotting and Backups<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Create images from containers to <strong>snapshot the current state<\/strong> for backup purposes.<\/li>\n\n\n\n<li>Example: Backup a database container with all its data.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>2. Quick Prototyping and Manual Changes<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Save an image after <strong>manual configuration<\/strong> or software installation in a container.<\/li>\n\n\n\n<li>Example: Install a library in a running Python container, then commit it for future use.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>3. Debugging and Hotfixes<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Modify a running container to apply a <strong>quick fix<\/strong> and commit it as a temporary image.<\/li>\n\n\n\n<li>Example: Fix a misconfiguration in a running NGINX container and save the new state.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>4. Custom Base Images<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Create <strong>custom base images<\/strong> with pre-installed dependencies or configurations.<\/li>\n\n\n\n<li>Example: Build a Python base image with specific libraries installed.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>5. Preserving Legacy Containers<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Preserve old containers by committing them as images for future use.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>6. CI\/CD Snapshots<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use <code>docker commit<\/code> to <strong>snapshot application state<\/strong> during continuous integration and testing.<\/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 commit<\/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 commit my_container my_image:latest<\/code><\/td><td>Create an image from a container<\/td><\/tr><tr><td><code>docker commit -a \"John Doe\" -m \"Update configs\"<\/code><\/td><td>Add author and commit message to the image<\/td><\/tr><tr><td><code>docker commit --pause=false my_container my_image<\/code><\/td><td>Commit without pausing the container<\/td><\/tr><tr><td><code>docker commit stopped_container my_backup<\/code><\/td><td>Create an image from a stopped container<\/td><\/tr><tr><td><code>docker commit a1b2c3d4e5f6 my_custom_image<\/code><\/td><td>Commit using container ID<\/td><\/tr><tr><td><code>docker commit my_app nightly_snapshot:20230207<\/code><\/td><td>Automate commit with a timestamp in the tag<\/td><\/tr><tr><td><code>docker commit my_nginx_container nginx_custom<\/code><\/td><td>Save a container with custom configurations<\/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 commit<\/code>:<\/strong><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Avoid using <code>docker commit<\/code> in production<\/strong>\u2014prefer Dockerfiles for reproducibility and version control.<\/li>\n\n\n\n<li><strong>Add descriptive tags and messages<\/strong> to track changes.<\/li>\n\n\n\n<li><strong>Pause the container<\/strong> during commit for consistent snapshots (<code>--pause=true<\/code>).<\/li>\n\n\n\n<li><strong>Use <code>docker commit<\/code> for debugging<\/strong> or quick experiments, then convert to a Dockerfile for long-term use.<\/li>\n\n\n\n<li><strong>Combine with <code>docker save<\/code><\/strong> to create portable images for backup or transfer.<\/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 is running\/stopped. Use <code>docker ps -a<\/code> to verify.<\/li>\n\n\n\n<li><strong>&#8220;Image is too large&#8221;<\/strong><br>\u2192 Remove unnecessary files or use a multi-stage build to reduce the image size.<\/li>\n\n\n\n<li><strong>Changes not reflected in the new image<\/strong><br>\u2192 Ensure you\u2019re modifying the correct container and committing it after the changes.<\/li>\n\n\n\n<li><strong>&#8220;Permission denied&#8221;<\/strong><br>\u2192 Run the command with elevated privileges (<code>sudo<\/code>) or ensure your user has Docker permissions.<\/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 commit<\/code> with Other Commands<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Backup and Transfer the Committed Image<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" 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\">commit<\/span> <span class=\"hljs-selector-tag\">my_container<\/span> <span class=\"hljs-selector-tag\">my_backup_image<\/span>\n<span class=\"hljs-selector-tag\">docker<\/span> <span class=\"hljs-selector-tag\">save<\/span> <span class=\"hljs-selector-tag\">my_backup_image<\/span> &gt; <span class=\"hljs-selector-tag\">my_backup_image<\/span><span class=\"hljs-selector-class\">.tar<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><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>Restore the Image on Another Machine<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" 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\">load<\/span> &lt; <span class=\"hljs-selector-tag\">my_backup_image<\/span><span class=\"hljs-selector-class\">.tar<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><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<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 commit, covering what it does, examples, and use cases. What is docker commit? docker commit is a Docker command used to create a new&#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-48425","post","type-post","status-publish","format-standard","hentry","category-docker"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/48425","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=48425"}],"version-history":[{"count":2,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/48425\/revisions"}],"predecessor-version":[{"id":48427,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/48425\/revisions\/48427"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=48425"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=48425"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=48425"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}