What is the difference between the 'COPY' and 'ADD' commands in a Dockerfile?

docker, dockerfile

Solution

You should check the `ADD` and `COPY` documentation for a more detailed description of their behaviors, but in a nutshell, the major difference is that `ADD` can do more than `COPY`:

- `ADD` allows `<src>` to be a URL

- Referring to comments below, the `ADD` documentation states that:

If is a local tar archive in a recognized compression format (identity, gzip, bzip2 or xz) then it is unpacked as a directory. Resources from remote URLs are not decompressed.

Note that the Best practices for writing Dockerfiles suggests using `COPY` where the magic of `ADD` is not required. Otherwise, you (since you had to look up this answer) are likely to get surprised someday when you mean to copy `keep_this_archive_intact.tar.gz` into your container, but instead, you spray the contents onto your filesystem.

Problem

What is the difference between the `COPY` and `ADD` commands in a Dockerfile, and when would I use one over the other? ``` COPY <src> <dest> ``` The COPY instruction will copy new files from `<src>` and add them to the container's filesystem at path `<dest>` ``` ADD <src> <dest> ``` The ADD instruction will copy new files from `<src>` and add them to the container's filesystem at path `<dest>`.

Original source