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:
commit
980000071d
3 changed files with 23 additions and 7 deletions
|
@ -1098,6 +1098,15 @@ working directory, by changing into the directory to the value
|
|||
returned by ``pwd``. So this combination executes the command
|
||||
using the container, but inside the current working directory.
|
||||
|
||||
.. code-block:: 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
|
||||
|
|
|
@ -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::
|
||||
|
||||
|
|
|
@ -1909,10 +1909,13 @@ 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)
|
||||
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
|
||||
if err := srv.RegisterLinks(container, &hostConfig); err != nil {
|
||||
job.Error(err)
|
||||
|
|
Loading…
Add table
Reference in a new issue