diff options
author | umohnani8 <umohnani@redhat.com> | 2018-02-16 10:38:12 -0500 |
---|---|---|
committer | Atomic Bot <atomic-devel@projectatomic.io> | 2018-02-22 15:14:00 +0000 |
commit | 3d395767d8c3e467e784e3836c7175f6d11931a7 (patch) | |
tree | a64044df96164ad10873ad5a642e576b99b33bdd /cmd/podman/create.go | |
parent | 7a7a6c2d79ebd831acf0321643903136dca7c2cb (diff) | |
download | podman-3d395767d8c3e467e784e3836c7175f6d11931a7.tar.gz podman-3d395767d8c3e467e784e3836c7175f6d11931a7.tar.bz2 podman-3d395767d8c3e467e784e3836c7175f6d11931a7.zip |
Implement --image-volumes for create and run
--image-volumes tells podman what to do with the image volumes in the image config
There are 3 options: bind, tmpfs, and ignore
bind puts the volume contents in /var/lib/containers/storage/container-id/volumes/vol-dir
and bind mounts it into the container at /vol-dir
tmpfs mounts /vol-dir as a tmps into the container
ignore doesn't mount the image volumes onto the container
Signed-off-by: umohnani8 <umohnani@redhat.com>
Closes: #377
Approved by: rhatdan
Diffstat (limited to 'cmd/podman/create.go')
-rw-r--r-- | cmd/podman/create.go | 42 |
1 files changed, 29 insertions, 13 deletions
diff --git a/cmd/podman/create.go b/cmd/podman/create.go index 3d811b58b..810a5e3ed 100644 --- a/cmd/podman/create.go +++ b/cmd/podman/create.go @@ -89,6 +89,8 @@ type createConfig struct { Hostname string //hostname Image string ImageID string + BuiltinImgVolumes map[string]struct{} // volumes defined in the image config + ImageVolumeType string // how to handle the image volume, either bind, tmpfs, or ignore Interactive bool //interactive IpcMode container.IpcMode //ipc IP6Address string //ipv6 @@ -180,6 +182,7 @@ func createCmd(c *cli.Context) error { if err != nil { return err } + useImageVolumes := createConfig.ImageVolumeType == "bind" runtimeSpec, err := createConfigToOCISpec(createConfig) if err != nil { @@ -190,7 +193,7 @@ func createCmd(c *cli.Context) error { return errors.Wrapf(err, "unable to parse new container options") } // Gather up the options for NewContainer which consist of With... funcs - options = append(options, libpod.WithRootFSFromImage(createConfig.ImageID, createConfig.Image, true)) + options = append(options, libpod.WithRootFSFromImage(createConfig.ImageID, createConfig.Image, useImageVolumes)) options = append(options, libpod.WithSELinuxLabels(createConfig.ProcessLabel, createConfig.MountLabel)) options = append(options, libpod.WithLabels(createConfig.Labels)) options = append(options, libpod.WithUser(createConfig.User)) @@ -626,19 +629,32 @@ func parseCreateOpts(c *cli.Context, runtime *libpod.Runtime, imageName string, return nil, errors.Errorf("cannot pass additional search domains when also specifying '.'") } + ImageVolumes := data.ContainerConfig.Volumes + + var imageVolType = map[string]string{ + "bind": "", + "tmpfs": "", + "ignore": "", + } + if _, ok := imageVolType[c.String("image-volume")]; !ok { + return nil, errors.Errorf("invalid image-volume type %q. Pick one of bind, tmpfs, or ignore", c.String("image-volume")) + } + config := &createConfig{ - Runtime: runtime, - CapAdd: c.StringSlice("cap-add"), - CapDrop: c.StringSlice("cap-drop"), - CgroupParent: c.String("cgroup-parent"), - Command: command, - Detach: c.Bool("detach"), - Devices: c.StringSlice("device"), - DNSOpt: c.StringSlice("dns-opt"), - DNSSearch: c.StringSlice("dns-search"), - DNSServers: c.StringSlice("dns"), - Entrypoint: entrypoint, - Env: env, + Runtime: runtime, + BuiltinImgVolumes: ImageVolumes, + ImageVolumeType: c.String("image-volume"), + CapAdd: c.StringSlice("cap-add"), + CapDrop: c.StringSlice("cap-drop"), + CgroupParent: c.String("cgroup-parent"), + Command: command, + Detach: c.Bool("detach"), + Devices: c.StringSlice("device"), + DNSOpt: c.StringSlice("dns-opt"), + DNSSearch: c.StringSlice("dns-search"), + DNSServers: c.StringSlice("dns"), + Entrypoint: entrypoint, + Env: env, //ExposedPorts: ports, GroupAdd: groupAdd, Hostname: c.String("hostname"), |