Use bind mounts
Bind mounts have been around since the early days of Docker. Bind mounts have limited functionality compared to volumes. When you use a bind mount, a file or directory on the host machine is mounted into a container. The file or directory is referenced by its full or relative path on the host machine. By contrast, when you use a volume, a new directory is created within Docker’s storage directory on the host machine, and Docker manages that directory’s contents.nginx
Start a container with a bind mount
Consider a case where you have a directory source
and that when you build the source code, the artifacts are saved into another directory source/target/
. You want the artifacts to be available to the container at /app/
, and you want the container to get access to a new build each time you build the source on your development host. Use the following command to bind-mount the target/
directory into your container at /app/
. Run the command from within the source
directory. The $(pwd)
sub-command expands to the current working directory on Linux or macOS hosts.docker
The --mount
and -v
examples below produce the same result. You can’t run them both unless you remove the devtest
container after running the first one.app
--mount 語法格式:less
$ docker run -d \ -it \ --name devtest \ --mount type=bind,source="$(pwd)"/target,target=/app \ nginx:latest
-v 語法格式:ide
$ docker run -d \ -it \ --name devtest \ -v "$(pwd)"/target:/app \ nginx:latest
Mounting into a non-empty directory on the container
If you bind-mount into a non-empty directory on the container, the directory’s existing contents are obscured(覆蓋) by the bind mount. This can be beneficial, such as when you want to test a new version of your application without building a new image. However, it can also be surprising and this behavior differs from that of docker volumes.ui