mirror of
https://github.com/containers/podman.git
synced 2025-05-21 09:05:56 +08:00
Merge pull request #10334 from mheon/add_relabel_vol_plugin
Ensure that :Z/:z/:U can be used with named volumes
This commit is contained in:
@ -358,6 +358,25 @@ func (c *Container) generateSpec(ctx context.Context) (*spec.Spec, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Add named volumes
|
||||
for _, namedVol := range c.config.NamedVolumes {
|
||||
volume, err := c.runtime.GetVolume(namedVol.Name)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "error retrieving volume %s to add to container %s", namedVol.Name, c.ID())
|
||||
}
|
||||
mountPoint, err := volume.MountPoint()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
volMount := spec.Mount{
|
||||
Type: "bind",
|
||||
Source: mountPoint,
|
||||
Destination: namedVol.Dest,
|
||||
Options: namedVol.Options,
|
||||
}
|
||||
g.AddMount(volMount)
|
||||
}
|
||||
|
||||
// Check if the spec file mounts contain the options z, Z or U.
|
||||
// If they have z or Z, relabel the source directory and then remove the option.
|
||||
// If they have U, chown the source directory and them remove the option.
|
||||
@ -391,25 +410,6 @@ func (c *Container) generateSpec(ctx context.Context) (*spec.Spec, error) {
|
||||
g.SetProcessSelinuxLabel(c.ProcessLabel())
|
||||
g.SetLinuxMountLabel(c.MountLabel())
|
||||
|
||||
// Add named volumes
|
||||
for _, namedVol := range c.config.NamedVolumes {
|
||||
volume, err := c.runtime.GetVolume(namedVol.Name)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "error retrieving volume %s to add to container %s", namedVol.Name, c.ID())
|
||||
}
|
||||
mountPoint, err := volume.MountPoint()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
volMount := spec.Mount{
|
||||
Type: "bind",
|
||||
Source: mountPoint,
|
||||
Destination: namedVol.Dest,
|
||||
Options: namedVol.Options,
|
||||
}
|
||||
g.AddMount(volMount)
|
||||
}
|
||||
|
||||
// Add bind mounts to container
|
||||
for dstPath, srcPath := range c.state.BindMounts {
|
||||
newMount := spec.Mount{
|
||||
|
@ -343,4 +343,12 @@ var _ = Describe("Podman run", func() {
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.OutputToString()).To(ContainSubstring("container_init_t"))
|
||||
})
|
||||
|
||||
It("podman relabels named volume with :Z", func() {
|
||||
session := podmanTest.Podman([]string{"run", "-v", "testvol:/test1/test:Z", fedoraMinimal, "ls", "-alZ", "/test1"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
match, _ := session.GrepString(":s0:")
|
||||
Expect(match).Should(BeTrue())
|
||||
})
|
||||
})
|
||||
|
Reference in New Issue
Block a user