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:
parent
6fb495bf6f
commit
4099a31304
1 changed files with 20 additions and 0 deletions
20
container.go
20
container.go
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue