func (s *TagStore) exportImage(name, tempdir string) error { for n := name; n != ""; { // temporary directory tmpImageDir := filepath.Join(tempdir, n) if err := os.Mkdir(tmpImageDir, os.FileMode(0755)); err != nil { if os.IsExist(err) { return nil } return err } var version = "1.0" var versionBuf = []byte(version) if err := ioutil.WriteFile(filepath.Join(tmpImageDir, "VERSION"), versionBuf, os.FileMode(0644)); err != nil { return err } // serialize json json, err := os.Create(filepath.Join(tmpImageDir, "json")) if err != nil { return err } img, err := s.LookupImage(n) if err != nil || img == nil { return fmt.Errorf("No such image %s", n) } imageInspectRaw, err := s.graph.RawJSON(img.ID) if err != nil { return err } written, err := json.Write(imageInspectRaw) if err != nil { return err } if written != len(imageInspectRaw) { logrus.Warnf("%d byes should have been written instead %d have been written", written, len(imageInspectRaw)) } // serialize filesystem fsTar, err := os.Create(filepath.Join(tmpImageDir, "layer.tar")) if err != nil { return err } if err := s.ImageTarLayer(n, fsTar); err != nil { return err } for _, fname := range []string{"", "VERSION", "json", "layer.tar"} { if err := os.Chtimes(filepath.Join(tmpImageDir, fname), img.Created, img.Created); err != nil { return err } } // try again with parent n = img.Parent } return nil }
func (s *TagStore) exportImage(name, tempdir string) error { for n := name; n != ""; { // temporary directory tmpImageDir := filepath.Join(tempdir, n) if err := os.Mkdir(tmpImageDir, os.FileMode(0755)); err != nil { if os.IsExist(err) { return nil } return err } var version = "1.0" var versionBuf = []byte(version) if err := ioutil.WriteFile(filepath.Join(tmpImageDir, "VERSION"), versionBuf, os.FileMode(0644)); err != nil { return err } // serialize json json, err := os.Create(filepath.Join(tmpImageDir, "json")) if err != nil { return err } imageInspectRaw, err := s.lookupRaw(n) if err != nil { return err } written, err := json.Write(imageInspectRaw) if err != nil { return err } if written != len(imageInspectRaw) { logrus.Warnf("%d byes should have been written instead %d have been written", written, len(imageInspectRaw)) } // serialize filesystem fsTar, err := os.Create(filepath.Join(tmpImageDir, "layer.tar")) if err != nil { return err } if err := s.ImageTarLayer(n, fsTar); err != nil { return err } // find parent img, err := s.LookupImage(n) if err != nil { return err } n = img.Parent } return nil }