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

Implement the -volumes-from in order to mount volumes from an other container

This commit is contained in:
Guillaume J. Charmes 2013-04-10 16:23:30 -07:00
parent 6fb495bf6f
commit 4099a31304

View file

@ -68,6 +68,7 @@ type Config struct {
Dns []string Dns []string
Image string // Name of the image as it was passed by the operator (eg. could be symbolic) Image string // Name of the image as it was passed by the operator (eg. could be symbolic)
Volumes map[string]struct{} Volumes map[string]struct{}
VolumesFrom string
} }
func ParseRun(args []string, stdout io.Writer, capabilities *Capabilities) (*Config, error) { func ParseRun(args []string, stdout io.Writer, capabilities *Capabilities) (*Config, error) {
@ -102,6 +103,8 @@ func ParseRun(args []string, stdout io.Writer, capabilities *Capabilities) (*Con
flVolumes := NewPathOpts() flVolumes := NewPathOpts()
cmd.Var(flVolumes, "v", "Attach a data volume") cmd.Var(flVolumes, "v", "Attach a data volume")
flVolumesFrom := cmd.String("volumes-from", "", "Mount volumes from the specified container")
if err := cmd.Parse(args); err != nil { if err := cmd.Parse(args); err != nil {
return nil, err return nil, err
} }
@ -142,6 +145,7 @@ func ParseRun(args []string, stdout io.Writer, capabilities *Capabilities) (*Con
Dns: flDns, Dns: flDns,
Image: image, Image: image,
Volumes: flVolumes, Volumes: flVolumes,
VolumesFrom: *flVolumesFrom,
} }
if *flMemory > 0 && !capabilities.SwapLimit { if *flMemory > 0 && !capabilities.SwapLimit {
@ -414,6 +418,22 @@ func (container *Container) Start() error {
} }
} }
if container.Config.VolumesFrom != "" {
c := container.runtime.Get(container.Config.VolumesFrom)
if c == nil {
return fmt.Errorf("Container %s not found. Impossible to mount its volumes")
}
for volPath, id := range c.Volumes {
if _, exists := container.Volumes[volPath]; exists {
return fmt.Errorf("The requested volume %s overlap one of the volume of the container %s", volPath, c.Id)
}
if err := os.MkdirAll(path.Join(container.RootfsPath(), volPath), 0755); err != nil {
return nil
}
container.Volumes[volPath] = id
}
}
if err := container.generateLXCConfig(); err != nil { if err := container.generateLXCConfig(); err != nil {
return err return err
} }