mirror of https://github.com/containers/podman.git
				
				
				
			Fix built-in volume issue with podman run/create
The destination path of the built-in volume was not being created but a relabel was being attempted on it, this was causing issues with all images that have built-in volumes. This patch fixes that and ensures the destination volume path is created. Signed-off-by: umohnani8 <umohnani@redhat.com> Closes: #1026 Approved by: mheon
This commit is contained in:
		
							parent
							
								
									7fc1a329bd
								
							
						
					
					
						commit
						4c8c000f3a
					
				|  | @ -1431,28 +1431,39 @@ func (c *Container) addImageVolumes(ctx context.Context, g *generate.Generator) | |||
| 		volumePath := filepath.Join(c.config.StaticDir, "volumes", k) | ||||
| 		srcPath := filepath.Join(mountPoint, k) | ||||
| 
 | ||||
| 		if _, err := os.Stat(srcPath); os.IsNotExist(err) { | ||||
| 			logrus.Infof("Volume image mount point %s does not exist in root FS, need to create it", k) | ||||
| 			if err = os.MkdirAll(volumePath, 0755); err != nil { | ||||
| 				return errors.Wrapf(err, "error creating directory %q for volume %q in container %q", volumePath, k, c.ID) | ||||
| 			} | ||||
| 
 | ||||
| 		var ( | ||||
| 			uid uint32 | ||||
| 			gid uint32 | ||||
| 		) | ||||
| 		if c.config.User != "" { | ||||
| 			if !c.state.Mounted { | ||||
| 				return errors.Wrapf(ErrCtrStateInvalid, "container %s must be mounted in order to translate User field", c.ID()) | ||||
| 			} | ||||
| 				uid, gid, err := chrootuser.GetUser(c.state.Mountpoint, c.config.User) | ||||
| 			uid, gid, err = chrootuser.GetUser(c.state.Mountpoint, c.config.User) | ||||
| 			if err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		if _, err := os.Stat(srcPath); os.IsNotExist(err) { | ||||
| 			logrus.Infof("Volume image mount point %s does not exist in root FS, need to create it", k) | ||||
| 			if err = os.MkdirAll(srcPath, 0755); err != nil { | ||||
| 				return errors.Wrapf(err, "error creating directory %q for volume %q in container %q", volumePath, k, c.ID) | ||||
| 			} | ||||
| 
 | ||||
| 			if err = os.Chown(srcPath, int(uid), int(gid)); err != nil { | ||||
| 				return errors.Wrapf(err, "error chowning directory %q for volume %q in container %q", srcPath, k, c.ID) | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		if _, err := os.Stat(volumePath); os.IsNotExist(err) { | ||||
| 			if err = os.MkdirAll(volumePath, 0755); err != nil { | ||||
| 				return errors.Wrapf(err, "error creating directory %q for volume %q in container %q", volumePath, k, c.ID) | ||||
| 			} | ||||
| 
 | ||||
| 			if err = os.Chown(volumePath, int(uid), int(gid)); err != nil { | ||||
| 				return errors.Wrapf(err, "error chowning directory %q for volume %q in container %q", volumePath, k, c.ID) | ||||
| 			} | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		if _, err := os.Stat(volumePath); os.IsNotExist(err) { | ||||
| 
 | ||||
| 			if err = label.Relabel(volumePath, c.config.MountLabel, false); err != nil { | ||||
| 				return errors.Wrapf(err, "error relabeling directory %q for volume %q in container %q", volumePath, k, c.ID) | ||||
|  |  | |||
|  | @ -476,4 +476,23 @@ var _ = Describe("Podman run", func() { | |||
| 		session.WaitWithDefaultTimeout() | ||||
| 		Expect(session.ExitCode()).To(Equal(100)) | ||||
| 	}) | ||||
| 
 | ||||
| 	It("podman run with built-in volume image", func() { | ||||
| 		session := podmanTest.Podman([]string{"run", "--rm", "docker.io/library/redis:alpine", "ls"}) | ||||
| 		session.WaitWithDefaultTimeout() | ||||
| 		Expect(session.ExitCode()).To(Equal(0)) | ||||
| 
 | ||||
| 		session = podmanTest.Podman([]string{"rmi", "docker.io/library/redis:alpine"}) | ||||
| 		session.WaitWithDefaultTimeout() | ||||
| 		Expect(session.ExitCode()).To(Equal(0)) | ||||
| 
 | ||||
| 		session = podmanTest.Podman([]string{"run", "--rm", "-e", "MYSQL_USER=zmuser", "-e", "MYSQL_PASSWORD=zmpass", "-e", "MYSQL_DATABASE=zm", "-e", "MYSQL_ROOT_PASSWORD=mysqlpassword", "docker.io/centos/mariadb-101-centos7", "ls", "-al", "/var/lib/mysql/data"}) | ||||
| 		session.WaitWithDefaultTimeout() | ||||
| 		Expect(session.ExitCode()).To(Equal(0)) | ||||
| 		Expect(session.OutputToString()).To(ContainSubstring("mysql root")) | ||||
| 
 | ||||
| 		session = podmanTest.Podman([]string{"rmi", "docker.io/centos/mariadb-101-centos7"}) | ||||
| 		session.WaitWithDefaultTimeout() | ||||
| 		Expect(session.ExitCode()).To(Equal(0)) | ||||
| 	}) | ||||
| }) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue