{"id":48351,"date":"2025-02-08T08:09:27","date_gmt":"2025-02-08T08:09:27","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=48351"},"modified":"2025-07-12T05:40:12","modified_gmt":"2025-07-12T05:40:12","slug":"docker-cp","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/docker-cp\/","title":{"rendered":"Docker commands Guide &#8211; docker cp with examples"},"content":{"rendered":"\n<p>Here\u2019s a <strong>complete tutorial<\/strong> on the <code>docker cp<\/code> command, including how it works, its use cases, and a comprehensive list of examples.<\/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 cp<\/code>?<\/strong><\/h2>\n\n\n\n<p><code>docker cp<\/code> is a Docker command used to <strong>copy files or directories<\/strong> between your local machine (host) and a <strong>Docker container<\/strong>. It\u2019s similar to the Linux <code>cp<\/code> command but operates between the <strong>host system<\/strong> and <strong>Docker containers<\/strong>.<\/p>\n\n\n\n<p><strong>Key Features of <code>docker cp<\/code>:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Copy files from the <strong>host to a container<\/strong>.<\/li>\n\n\n\n<li>Copy files from a <strong>container to the host<\/strong>.<\/li>\n\n\n\n<li>Works with <strong>absolute<\/strong> and <strong>relative paths<\/strong>.<\/li>\n\n\n\n<li>Supports copying <strong>entire directories<\/strong>.<\/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\">cp<\/span> <span class=\"hljs-selector-attr\">&#91;OPTIONS]<\/span> <span class=\"hljs-selector-tag\">CONTAINER<\/span><span class=\"hljs-selector-pseudo\">:SRC_PATH<\/span> <span class=\"hljs-selector-tag\">DEST_PATH<\/span>\n<span class=\"hljs-selector-tag\">docker<\/span> <span class=\"hljs-selector-tag\">cp<\/span> <span class=\"hljs-selector-attr\">&#91;OPTIONS]<\/span> <span class=\"hljs-selector-tag\">SRC_PATH<\/span> <span class=\"hljs-selector-tag\">CONTAINER<\/span><span class=\"hljs-selector-pseudo\">:DEST_PATH<\/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.<\/li>\n\n\n\n<li><code>SRC_PATH<\/code>: The source file or directory path (inside the container or on the host).<\/li>\n\n\n\n<li><code>DEST_PATH<\/code>: The destination file or directory path (inside the container or on the host).<\/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 cp<\/code><\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>1. Copy a File from Host to Container<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">docker cp myfile.txt my_container:<span class=\"hljs-regexp\">\/tmp\/my<\/span>file.txt\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><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 command copies <code>myfile.txt<\/code> from the host to the <code>\/tmp<\/code> directory of <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. Copy a File from Container to Host<\/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 cp my_container:<span class=\"hljs-regexp\">\/etc\/<\/span>hostname .\/hostname.txt\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 command copies the <code>\/etc\/hostname<\/code> file from the container to the current directory on the host and names it <code>hostname.txt<\/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>3. Copy a Directory from Host to 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 cp .\/myfolder my_container:<span class=\"hljs-regexp\">\/var\/my<\/span>folder\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 copies the entire <code>myfolder<\/code> directory from the host into <code>\/var<\/code> in the container.<\/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. Copy a Directory from Container to Host<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">docker cp my_container:<span class=\"hljs-regexp\">\/usr\/<\/span>share\/nginx\/html .\/nginx-html\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><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 copies the <code>\/usr\/share\/nginx\/html<\/code> directory from the container to the current directory on the host.<\/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. Copy a File and Overwrite in the Container<\/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\">docker cp updated-config.conf my_container:<span class=\"hljs-regexp\">\/etc\/my<\/span>app\/config.conf\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>The existing <code>config.conf<\/code> in the container is replaced with <code>updated-config.conf<\/code> from the host.<\/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. Copy a File with a New Name<\/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 cp my_container:<span class=\"hljs-regexp\">\/var\/<\/span>log\/nginx\/access.log .\/nginx_access_backup.log\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<p>This copies the <code>access.log<\/code> from the container and saves it on the host as <code>nginx_access_backup.log<\/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>7. Copy Files Between Two Containers (Indirectly)<\/strong><\/h3>\n\n\n\n<p>Docker does not allow direct copying between containers using <code>docker cp<\/code>. However, you can do it in two steps:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Copy the file to the host: <code>docker cp container1:\/path\/to\/file .\/file<\/code><\/li>\n\n\n\n<li>Copy the file to the second container: <code>docker cp .\/file container2:\/path\/to\/file<\/code><\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>8. Using Absolute Paths<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">docker cp \/home\/user\/myfile.txt my_container:<span class=\"hljs-regexp\">\/tmp\/<\/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\">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 uses an absolute path to copy <code>myfile.txt<\/code> from the host to the <code>\/tmp<\/code> directory in the container.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>9. Copying Hidden Files<\/strong><\/h3>\n\n\n\n<p>To copy hidden files (like <code>.env<\/code>), use:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">docker cp .\/myfolder\/.env my_container:<span class=\"hljs-regexp\">\/app\/<\/span>.env\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><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<h3 class=\"wp-block-heading\"><strong>10. Copy Logs from Container to Host<\/strong><\/h3>\n\n\n\n<p>If you want to copy logs for analysis:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">docker cp my_container:<span class=\"hljs-regexp\">\/var\/<\/span>log\/app.log .\/app.log\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><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<h3 class=\"wp-block-heading\"><strong>11. Copy a File from a Stopped Container<\/strong><\/h3>\n\n\n\n<p>You can still use <code>docker cp<\/code> on stopped containers:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">docker cp stopped_container:<span class=\"hljs-regexp\">\/data\/<\/span>backup.tar.gz .\/backup.tar.gz\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><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<h3 class=\"wp-block-heading\"><strong>12. Copy Large Directories<\/strong><\/h3>\n\n\n\n<p>To copy large directories (e.g., database backups or logs), ensure you have enough space on your host:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">docker cp my_container:<span class=\"hljs-regexp\">\/var\/<\/span>lib\/mysql .\/mysql_backup\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><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<h3 class=\"wp-block-heading\"><strong>13. Verify File Copy<\/strong><\/h3>\n\n\n\n<p>After copying, you can verify it with:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">docker exec my_container ls -l \/path\/in\/container\n<\/code><\/span><\/pre>\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 cp<\/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 cp file.txt my_container:\/path\/to\/file.txt<\/code><\/td><td>Copy a file from host to container<\/td><\/tr><tr><td><code>docker cp my_container:\/path\/to\/file.txt .\/file.txt<\/code><\/td><td>Copy a file from container to host<\/td><\/tr><tr><td><code>docker cp .\/myfolder my_container:\/path\/in\/container<\/code><\/td><td>Copy a directory from host to container<\/td><\/tr><tr><td><code>docker cp my_container:\/path\/in\/container .\/folder<\/code><\/td><td>Copy a directory from container to host<\/td><\/tr><tr><td><code>docker cp stopped_container:\/file .\/file<\/code><\/td><td>Copy a file from a stopped container to host<\/td><\/tr><tr><td><code>docker cp .\/file container:\/new\/path\/newfile.txt<\/code><\/td><td>Copy a file with a new name in the container<\/td><\/tr><tr><td><code>docker cp hidden\/.env my_container:\/app\/.env<\/code><\/td><td>Copy hidden files from host to container<\/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<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Use absolute paths<\/strong> for clarity and to avoid mistakes.<\/li>\n\n\n\n<li><strong>Verify copied files<\/strong> with <code>docker exec<\/code> or <code>docker logs<\/code>.<\/li>\n\n\n\n<li><strong>Avoid overwriting critical files<\/strong> inside the container unless necessary.<\/li>\n\n\n\n<li><strong>Backup large directories<\/strong> regularly using <code>docker cp<\/code> to avoid data loss.<\/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>Common Errors and Solutions<\/strong><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>&#8220;No such file or directory&#8221;<\/strong><br>\u2192 Ensure the file or directory exists on the host or in the container.<\/li>\n\n\n\n<li><strong>Permission Denied<\/strong><br>\u2192 Check permissions of the destination directory and run Docker commands with the correct privileges (<code>sudo<\/code> if needed).<\/li>\n\n\n\n<li><strong>Container Not Found<\/strong><br>\u2192 Ensure the container is running or use the correct name\/ID.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Would you like examples for specific file types, like config files, web assets, or database backups? \ud83d\ude0a<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Here\u2019s a complete tutorial on the docker cp command, including how it works, its use cases, and a comprehensive list of examples. What is docker cp? docker cp is a&#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-48351","post","type-post","status-publish","format-standard","hentry","category-docker"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/48351","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=48351"}],"version-history":[{"count":2,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/48351\/revisions"}],"predecessor-version":[{"id":48353,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/48351\/revisions\/48353"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=48351"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=48351"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=48351"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}