COPY
has two forms:
COPY <src>... <dest>
COPY ["<src>",... "<dest>"] (this form is required for paths containing whitespace)
The COPY
instruction copies new files or directories from <src>
and adds them to the filesystem of the container at the path <dest>
.
Multiple <src>
resource may be specified but they must be relative to the source directory that is being built (the context of the build).
Each <src>
may contain wildcards and matching will be done using Go’s filepath.Match
rules. For example:
COPY hom* /mydir/ # adds all files starting with "hom"
COPY hom?.txt /mydir/ # ? is replaced with any single character, e.g., "home.txt"
The <dest>
is an absolute path, or a path relative to WORKDIR
, into which the source will be copied inside the destination container.
COPY test relativeDir/ # adds "test" to `WORKDIR`/relativeDir/
COPY test /absoluteDir/ # adds "test" to /absoluteDir/
All new files and directories are created with a UID and GID of 0.
Note: If you build using stdin (docker build - < somefile
), there is no build context, so COPY
can’t be used.
COPY
obeys the following rules:
The <src>
path must be inside the context of the build; you cannot COPY
../something /something, because the first step of a docker build is to send the context directory (and subdirectories) to the docker daemon.
If <src>
is a directory, the entire contents of the directory are copied, including filesystem metadata.
Note: The directory itself is not copied, just its contents.
If <src>
is any other kind of file, it is copied individually along with its metadata. In this case, if <dest>
ends with a trailing slash /, it will be considered a directory and the contents of <src>
will be written at <dest>/base(<src>)
.
If multiple <src>
resources are specified, either directly or due to the use of a wildcard, then <dest>
must be a directory, and it must end with a slash /
.
If <dest>
does not end with a trailing slash, it will be considered a regular file and the contents of <src>
will be written at <dest>
.
If <dest>
doesn’t exist, it is created along with all missing directories in its path.