mirror of
https://github.com/containers/podman.git
synced 2025-06-19 00:06:43 +08:00
Add OnBuild support for podman build
Only supported for docker formated images. OCI Does not support this flag. Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
This commit is contained in:
2
API.md
2
API.md
@ -153,7 +153,7 @@ method Commit(name: [string](https://godoc.org/builtin#string), image_name: [str
|
|||||||
Commit, creates an image from an existing container. It requires the name or
|
Commit, creates an image from an existing container. It requires the name or
|
||||||
ID of the container as well as the resulting image name. Optionally, you can define an author and message
|
ID of the container as well as the resulting image name. Optionally, you can define an author and message
|
||||||
to be added to the resulting image. You can also define changes to the resulting image for the following
|
to be added to the resulting image. You can also define changes to the resulting image for the following
|
||||||
attributes: _CMD, ENTRYPOINT, ENV, EXPOSE, LABEL, STOPSIGNAL, USER, VOLUME, and WORKDIR_. To pause the
|
attributes: _CMD, ENTRYPOINT, ENV, EXPOSE, LABEL, ONBUILD, STOPSIGNAL, USER, VOLUME, and WORKDIR_. To pause the
|
||||||
container while it is being committed, pass a _true_ bool for the pause argument. If the container cannot
|
container while it is being committed, pass a _true_ bool for the pause argument. If the container cannot
|
||||||
be found by the ID or name provided, a (ContainerNotFound)[#ContainerNotFound] error will be returned; otherwise,
|
be found by the ID or name provided, a (ContainerNotFound)[#ContainerNotFound] error will be returned; otherwise,
|
||||||
the resulting image's ID will be returned as a string.
|
the resulting image's ID will be returned as a string.
|
||||||
|
@ -19,7 +19,7 @@ var (
|
|||||||
commitFlags = []cli.Flag{
|
commitFlags = []cli.Flag{
|
||||||
cli.StringSliceFlag{
|
cli.StringSliceFlag{
|
||||||
Name: "change, c",
|
Name: "change, c",
|
||||||
Usage: "Apply the following possible instructions to the created image (default []): CMD | ENTRYPOINT | ENV | EXPOSE | LABEL | STOPSIGNAL | USER | VOLUME | WORKDIR",
|
Usage: fmt.Sprintf("Apply the following possible instructions to the created image (default []): %s", strings.Join(libpod.ChangeCmds, " | ")),
|
||||||
},
|
},
|
||||||
cli.StringFlag{
|
cli.StringFlag{
|
||||||
Name: "format, f",
|
Name: "format, f",
|
||||||
@ -92,7 +92,7 @@ func commitCmd(c *cli.Context) error {
|
|||||||
if c.IsSet("change") {
|
if c.IsSet("change") {
|
||||||
for _, change := range c.StringSlice("change") {
|
for _, change := range c.StringSlice("change") {
|
||||||
splitChange := strings.Split(strings.ToUpper(change), "=")
|
splitChange := strings.Split(strings.ToUpper(change), "=")
|
||||||
if !util.StringInSlice(splitChange[0], []string{"CMD", "ENTRYPOINT", "ENV", "EXPOSE", "LABEL", "STOPSIGNAL", "USER", "VOLUME", "WORKDIR"}) {
|
if !util.StringInSlice(splitChange[0], libpod.ChangeCmds) {
|
||||||
return errors.Errorf("invalid syntax for --change ", change)
|
return errors.Errorf("invalid syntax for --change ", change)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -531,7 +531,7 @@ method DeleteUnusedImages() -> (images: []string)
|
|||||||
# Commit, creates an image from an existing container. It requires the name or
|
# Commit, creates an image from an existing container. It requires the name or
|
||||||
# ID of the container as well as the resulting image name. Optionally, you can define an author and message
|
# ID of the container as well as the resulting image name. Optionally, you can define an author and message
|
||||||
# to be added to the resulting image. You can also define changes to the resulting image for the following
|
# to be added to the resulting image. You can also define changes to the resulting image for the following
|
||||||
# attributes: _CMD, ENTRYPOINT, ENV, EXPOSE, LABEL, STOPSIGNAL, USER, VOLUME, and WORKDIR_. To pause the
|
# attributes: _CMD, ENTRYPOINT, ENV, EXPOSE, LABEL, ONBUILD, STOPSIGNAL, USER, VOLUME, and WORKDIR_. To pause the
|
||||||
# container while it is being committed, pass a _true_ bool for the pause argument. If the container cannot
|
# container while it is being committed, pass a _true_ bool for the pause argument. If the container cannot
|
||||||
# be found by the ID or name provided, a (ContainerNotFound)[#ContainerNotFound] error will be returned; otherwise,
|
# be found by the ID or name provided, a (ContainerNotFound)[#ContainerNotFound] error will be returned; otherwise,
|
||||||
# the resulting image's ID will be returned as a string.
|
# the resulting image's ID will be returned as a string.
|
||||||
|
@ -24,7 +24,9 @@ Set the author for the committed image
|
|||||||
|
|
||||||
**--change, -c**
|
**--change, -c**
|
||||||
Apply the following possible instructions to the created image:
|
Apply the following possible instructions to the created image:
|
||||||
**CMD** | **ENTRYPOINT** | **ENV** | **EXPOSE** | **LABEL** | **STOPSIGNAL** | **USER** | **VOLUME** | **WORKDIR**
|
**CMD** | **ENTRYPOINT** | **ENV** | **EXPOSE** | **LABEL** | **ONBUILD** | **STOPSIGNAL** | **USER** | **VOLUME** | **WORKDIR**
|
||||||
|
|
||||||
|
|
||||||
Can be set multiple times
|
Can be set multiple times
|
||||||
|
|
||||||
**--format, -f**
|
**--format, -f**
|
||||||
|
@ -24,6 +24,9 @@ type ContainerCommitOptions struct {
|
|||||||
Changes []string
|
Changes []string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ChangeCmds is the list of valid Changes commands to passed to the Commit call
|
||||||
|
var ChangeCmds = []string{"CMD", "ENTRYPOINT", "ENV", "EXPOSE", "LABEL", "ONBUILD", "STOPSIGNAL", "USER", "VOLUME", "WORKDIR"}
|
||||||
|
|
||||||
// Commit commits the changes between a container and its image, creating a new
|
// Commit commits the changes between a container and its image, creating a new
|
||||||
// image
|
// image
|
||||||
func (c *Container) Commit(ctx context.Context, destImage string, options ContainerCommitOptions) (*image.Image, error) {
|
func (c *Container) Commit(ctx context.Context, destImage string, options ContainerCommitOptions) (*image.Image, error) {
|
||||||
@ -138,6 +141,8 @@ func (c *Container) Commit(ctx context.Context, destImage string, options Contai
|
|||||||
isLabelCleared = true
|
isLabelCleared = true
|
||||||
}
|
}
|
||||||
importBuilder.SetLabel(splitChange[1], splitChange[2])
|
importBuilder.SetLabel(splitChange[1], splitChange[2])
|
||||||
|
case "ONBUILD":
|
||||||
|
importBuilder.SetOnBuild(splitChange[1])
|
||||||
case "STOPSIGNAL":
|
case "STOPSIGNAL":
|
||||||
// No Set StopSignal
|
// No Set StopSignal
|
||||||
case "USER":
|
case "USER":
|
||||||
|
@ -88,7 +88,7 @@ k8s.io/kube-openapi 275e2ce91dec4c05a4094a7b1daee5560b555ac9 https://github.com/
|
|||||||
k8s.io/utils 258e2a2fa64568210fbd6267cf1d8fd87c3cb86e https://github.com/kubernetes/utils
|
k8s.io/utils 258e2a2fa64568210fbd6267cf1d8fd87c3cb86e https://github.com/kubernetes/utils
|
||||||
github.com/mrunalp/fileutils master
|
github.com/mrunalp/fileutils master
|
||||||
github.com/varlink/go master
|
github.com/varlink/go master
|
||||||
github.com/projectatomic/buildah 25f4e8ec639044bff4ab393188d083782f07b61c
|
github.com/projectatomic/buildah b66e8531456e2986ffc409f591c9005813589a34
|
||||||
github.com/Nvveen/Gotty master
|
github.com/Nvveen/Gotty master
|
||||||
github.com/fsouza/go-dockerclient master
|
github.com/fsouza/go-dockerclient master
|
||||||
github.com/openshift/imagebuilder master
|
github.com/openshift/imagebuilder master
|
||||||
|
3
vendor/github.com/projectatomic/buildah/commit.go
generated
vendored
3
vendor/github.com/projectatomic/buildah/commit.go
generated
vendored
@ -52,6 +52,9 @@ type CommitOptions struct {
|
|||||||
// Squash tells the builder to produce an image with a single layer
|
// Squash tells the builder to produce an image with a single layer
|
||||||
// instead of with possibly more than one layer.
|
// instead of with possibly more than one layer.
|
||||||
Squash bool
|
Squash bool
|
||||||
|
|
||||||
|
// OnBuild is a list of commands to be run by images based on this image
|
||||||
|
OnBuild []string
|
||||||
}
|
}
|
||||||
|
|
||||||
// PushOptions can be used to alter how an image is copied somewhere.
|
// PushOptions can be used to alter how an image is copied somewhere.
|
||||||
|
22
vendor/github.com/projectatomic/buildah/config.go
generated
vendored
22
vendor/github.com/projectatomic/buildah/config.go
generated
vendored
@ -331,6 +331,24 @@ func (b *Builder) SetUser(spec string) {
|
|||||||
b.Docker.Config.User = spec
|
b.Docker.Config.User = spec
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// OnBuild returns the OnBuild value from the container.
|
||||||
|
func (b *Builder) OnBuild() []string {
|
||||||
|
return copyStringSlice(b.Docker.Config.OnBuild)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearOnBuild removes all values from the OnBuild structure
|
||||||
|
func (b *Builder) ClearOnBuild() {
|
||||||
|
b.Docker.Config.OnBuild = []string{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetOnBuild sets a trigger instruction to be executed when the image is used
|
||||||
|
// as the base of another image.
|
||||||
|
// Note: this setting is not present in the OCIv1 image format, so it is
|
||||||
|
// discarded when writing images using OCIv1 formats.
|
||||||
|
func (b *Builder) SetOnBuild(onBuild string) {
|
||||||
|
b.Docker.Config.OnBuild = append(b.Docker.Config.OnBuild, onBuild)
|
||||||
|
}
|
||||||
|
|
||||||
// WorkDir returns the default working directory for running commands in the
|
// WorkDir returns the default working directory for running commands in the
|
||||||
// container, or in a container built using an image built from this container.
|
// container, or in a container built using an image built from this container.
|
||||||
func (b *Builder) WorkDir() string {
|
func (b *Builder) WorkDir() string {
|
||||||
@ -348,7 +366,7 @@ func (b *Builder) SetWorkDir(there string) {
|
|||||||
// Shell returns the default shell for running commands in the
|
// Shell returns the default shell for running commands in the
|
||||||
// container, or in a container built using an image built from this container.
|
// container, or in a container built using an image built from this container.
|
||||||
func (b *Builder) Shell() []string {
|
func (b *Builder) Shell() []string {
|
||||||
return b.Docker.Config.Shell
|
return copyStringSlice(b.Docker.Config.Shell)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetShell sets the default shell for running
|
// SetShell sets the default shell for running
|
||||||
@ -357,7 +375,7 @@ func (b *Builder) Shell() []string {
|
|||||||
// Note: this setting is not present in the OCIv1 image format, so it is
|
// Note: this setting is not present in the OCIv1 image format, so it is
|
||||||
// discarded when writing images using OCIv1 formats.
|
// discarded when writing images using OCIv1 formats.
|
||||||
func (b *Builder) SetShell(shell []string) {
|
func (b *Builder) SetShell(shell []string) {
|
||||||
b.Docker.Config.Shell = shell
|
b.Docker.Config.Shell = copyStringSlice(shell)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Env returns a list of key-value pairs to be set when running commands in the
|
// Env returns a list of key-value pairs to be set when running commands in the
|
||||||
|
8
vendor/github.com/projectatomic/buildah/imagebuildah/build.go
generated
vendored
8
vendor/github.com/projectatomic/buildah/imagebuildah/build.go
generated
vendored
@ -138,6 +138,8 @@ type BuildOptions struct {
|
|||||||
Labels []string
|
Labels []string
|
||||||
// Annotation metadata for an image
|
// Annotation metadata for an image
|
||||||
Annotations []string
|
Annotations []string
|
||||||
|
// OnBuild commands to be run by images based on this image
|
||||||
|
OnBuild []string
|
||||||
}
|
}
|
||||||
|
|
||||||
// Executor is a buildah-based implementation of the imagebuilder.Executor
|
// Executor is a buildah-based implementation of the imagebuilder.Executor
|
||||||
@ -183,6 +185,7 @@ type Executor struct {
|
|||||||
squash bool
|
squash bool
|
||||||
labels []string
|
labels []string
|
||||||
annotations []string
|
annotations []string
|
||||||
|
onbuild []string
|
||||||
}
|
}
|
||||||
|
|
||||||
// withName creates a new child executor that will be used whenever a COPY statement uses --from=NAME.
|
// withName creates a new child executor that will be used whenever a COPY statement uses --from=NAME.
|
||||||
@ -598,6 +601,7 @@ func (b *Executor) Prepare(ctx context.Context, ib *imagebuilder.Builder, node *
|
|||||||
Labels: builder.Labels(),
|
Labels: builder.Labels(),
|
||||||
Shell: builder.Shell(),
|
Shell: builder.Shell(),
|
||||||
StopSignal: builder.StopSignal(),
|
StopSignal: builder.StopSignal(),
|
||||||
|
OnBuild: builder.OnBuild(),
|
||||||
}
|
}
|
||||||
var rootfs *docker.RootFS
|
var rootfs *docker.RootFS
|
||||||
if builder.Docker.RootFS != nil {
|
if builder.Docker.RootFS != nil {
|
||||||
@ -714,6 +718,10 @@ func (b *Executor) Commit(ctx context.Context, ib *imagebuilder.Builder) (err er
|
|||||||
for v := range config.Volumes {
|
for v := range config.Volumes {
|
||||||
b.builder.AddVolume(v)
|
b.builder.AddVolume(v)
|
||||||
}
|
}
|
||||||
|
b.builder.ClearOnBuild()
|
||||||
|
for _, onBuildSpec := range config.OnBuild {
|
||||||
|
b.builder.SetOnBuild(onBuildSpec)
|
||||||
|
}
|
||||||
b.builder.SetWorkDir(config.WorkingDir)
|
b.builder.SetWorkDir(config.WorkingDir)
|
||||||
b.builder.SetEntrypoint(config.Entrypoint)
|
b.builder.SetEntrypoint(config.Entrypoint)
|
||||||
b.builder.SetShell(config.Shell)
|
b.builder.SetShell(config.Shell)
|
||||||
|
2
vendor/github.com/projectatomic/buildah/imagebuildah/chroot_symlink.go
generated
vendored
2
vendor/github.com/projectatomic/buildah/imagebuildah/chroot_symlink.go
generated
vendored
@ -37,7 +37,7 @@ func resolveChrootedSymlinks() {
|
|||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Our second paramter is the path name to evaluate for symbolic links
|
// Our second parameter is the path name to evaluate for symbolic links
|
||||||
symLink, err := getSymbolicLink(flag.Arg(0), flag.Arg(1))
|
symLink, err := getSymbolicLink(flag.Arg(0), flag.Arg(1))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Fprintf(os.Stderr, "error getting symbolic links: %v\n", err)
|
fmt.Fprintf(os.Stderr, "error getting symbolic links: %v\n", err)
|
||||||
|
4
vendor/github.com/projectatomic/buildah/pkg/cli/common.go
generated
vendored
4
vendor/github.com/projectatomic/buildah/pkg/cli/common.go
generated
vendored
@ -152,6 +152,10 @@ var (
|
|||||||
Name: "squash",
|
Name: "squash",
|
||||||
Usage: "Squash newly built layers into a single new layer. Buildah does not currently support caching so this is a NOOP.",
|
Usage: "Squash newly built layers into a single new layer. Buildah does not currently support caching so this is a NOOP.",
|
||||||
},
|
},
|
||||||
|
cli.BoolTFlag{
|
||||||
|
Name: "stream",
|
||||||
|
Usage: "There is no daemon in use, so this command is a NOOP.",
|
||||||
|
},
|
||||||
cli.StringSliceFlag{
|
cli.StringSliceFlag{
|
||||||
Name: "tag, t",
|
Name: "tag, t",
|
||||||
Usage: "tagged `name` to apply to the built image",
|
Usage: "tagged `name` to apply to the built image",
|
||||||
|
Reference in New Issue
Block a user