Add VOLUME instruction to buildfile

This commit is contained in:
Michael Crosby 2013-07-03 17:33:30 -09:00
parent 43b346d93b
commit eb9fef2c42
4 changed files with 40 additions and 0 deletions

View file

@ -173,6 +173,27 @@ func (b *buildFile) CmdEntrypoint(args string) error {
return nil
}
func (b *buildFile) CmdVolume(args string) error {
if args == "" {
return fmt.Errorf("Volume cannot be empty")
}
var volume []string
if err := json.Unmarshal([]byte(args), &volume); err != nil {
volume = []string{args}
}
if b.config.Volumes == nil {
b.config.Volumes = NewPathOpts()
}
for _, v := range volume {
b.config.Volumes[v] = struct{}{}
}
if err := b.commit("", b.config.Cmd, fmt.Sprintf("VOLUME %s", args)); err != nil {
return err
}
return nil
}
func (b *buildFile) addRemote(container *Container, orig, dest string) error {
file, err := utils.Download(orig, ioutil.Discard)
if err != nil {

View file

@ -87,6 +87,15 @@ run [ "$FOO" = "BAR" ]
from %s
ENTRYPOINT /bin/echo
CMD Hello world
`,
nil,
},
{
`
from docker-ut
VOLUME /test
CMD Hello world
`,
nil,
},

View file

@ -160,6 +160,13 @@ files and directories are created with mode 0700, uid and gid 0.
The `ENTRYPOINT` instruction adds an entry command that will not be overwritten when arguments are passed to docker run, unlike the behavior of `CMD`. This allows arguments to be passed to the entrypoint. i.e. `docker run <image> -d` will pass the "-d" argument to the entrypoint.
2.9 VOLUME
----------
``VOLUME ["/data"]``
The `VOLUME` instruction will add one or more new volumes to any container created from the image.
3. Dockerfile Examples
======================

View file

@ -89,4 +89,7 @@ func MergeConfig(userConf, imageConf *Config) {
if userConf.Entrypoint == nil || len(userConf.Entrypoint) == 0 {
userConf.Entrypoint = imageConf.Entrypoint
}
if userConf.Volumes == nil || len(userConf.Volumes) == 0 {
userConf.Volumes = imageConf.Volumes
}
}