1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

Merge pull request #2655 from mpetazzoni/create-local-bind-dirs

Automatically create non-existent bind-mounted host directories
This commit is contained in:
Michael Crosby 2014-01-21 16:27:20 -08:00
commit 980000071d
3 changed files with 23 additions and 7 deletions

View file

@ -1100,7 +1100,16 @@ using the container, but inside the current working directory.
.. code-block:: bash
$ sudo docker run -p 127.0.0.1:80:8080 ubuntu bash
$ sudo docker run -v /dont/exist:/foo -w /foo -i -t ubuntu bash
When the host directory of a bind-mounted volume doesn't exist, Docker
will automatically create this directory on the host for you. In the
example above, Docker will create the ``/dont/exist`` folder before
starting your container.
.. code-block:: bash
$ sudo docker run -p 127.0.0.1:80:8080 ubuntu bash
This binds port ``8080`` of the container to port ``80`` on ``127.0.0.1`` of the
host machine. :ref:`port_redirection` explains in detail how to manipulate ports

View file

@ -89,11 +89,15 @@ Mount a Host Directory as a Container Volume:
::
-v=[]: Create a bind mount with: [host-dir]:[container-dir]:[rw|ro].
If "host-dir" is missing, then docker creates a new volume.
This is not available from a Dockerfile as it makes the built image less portable
or shareable. [host-dir] volumes are 100% host dependent and will break on any
other machine.
If ``host-dir`` is missing from the command, then docker creates a new volume.
If ``host-dir`` is present but points to a non-existent directory on the host,
Docker will automatically create this directory and use it as the source of the
bind-mount.
Note that this is not available from a Dockerfile due the portability and
sharing purpose of it. The ``host-dir`` volumes are entirely host-dependent and
might not work on any other machine.
For example::

View file

@ -1909,8 +1909,11 @@ func (srv *Server) ContainerStart(job *engine.Job) engine.Status {
// ensure the source exists on the host
_, err := os.Stat(source)
if err != nil && os.IsNotExist(err) {
job.Errorf("Invalid bind mount '%s' : source doesn't exist", bind)
return engine.StatusErr
err = os.MkdirAll(source, 0755)
if err != nil {
job.Errorf("Could not create local directory '%s' for bind mount: %s!", source, err.Error())
return engine.StatusErr
}
}
}
// Register any links from the host config before starting the container