зеркало из https://github.com/microsoft/docker.git
Change ownership to root for ADD file/directory
Docker-DCO-1.1-Signed-off-by: Guillaume J. Charmes <guillaume@charmes.net> (github: creack)
This commit is contained in:
Родитель
7462cc6479
Коммит
026aebdebb
|
@ -419,10 +419,22 @@ func (b *buildFile) addContext(container *runtime.Container, orig, dest string,
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
chownR := func(destPath string, uid, gid int) error {
|
||||||
|
return filepath.Walk(destPath, func(path string, info os.FileInfo, err error) error {
|
||||||
|
if err := os.Lchown(path, uid, gid); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
if fi.IsDir() {
|
if fi.IsDir() {
|
||||||
if err := archive.CopyWithTar(origPath, destPath); err != nil {
|
if err := archive.CopyWithTar(origPath, destPath); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if err := chownR(destPath, 0, 0); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -452,6 +464,10 @@ func (b *buildFile) addContext(container *runtime.Container, orig, dest string,
|
||||||
if err := archive.CopyWithTar(origPath, destPath); err != nil {
|
if err := archive.CopyWithTar(origPath, destPath); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err := chownR(destPath, 0, 0); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -486,28 +502,36 @@ func (b *buildFile) CmdAdd(args string) error {
|
||||||
)
|
)
|
||||||
|
|
||||||
if utils.IsURL(orig) {
|
if utils.IsURL(orig) {
|
||||||
|
// Initiate the download
|
||||||
isRemote = true
|
isRemote = true
|
||||||
resp, err := utils.Download(orig)
|
resp, err := utils.Download(orig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Create a tmp dir
|
||||||
tmpDirName, err := ioutil.TempDir(b.contextPath, "docker-remote")
|
tmpDirName, err := ioutil.TempDir(b.contextPath, "docker-remote")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Create a tmp file within our tmp dir
|
||||||
tmpFileName := path.Join(tmpDirName, "tmp")
|
tmpFileName := path.Join(tmpDirName, "tmp")
|
||||||
tmpFile, err := os.OpenFile(tmpFileName, os.O_RDWR|os.O_CREATE|os.O_EXCL, 0600)
|
tmpFile, err := os.OpenFile(tmpFileName, os.O_RDWR|os.O_CREATE|os.O_EXCL, 0600)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer os.RemoveAll(tmpDirName)
|
defer os.RemoveAll(tmpDirName)
|
||||||
if _, err = io.Copy(tmpFile, resp.Body); err != nil {
|
|
||||||
|
// Download and dump result to tmp file
|
||||||
|
if _, err := io.Copy(tmpFile, resp.Body); err != nil {
|
||||||
tmpFile.Close()
|
tmpFile.Close()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
origPath = path.Join(filepath.Base(tmpDirName), filepath.Base(tmpFileName))
|
|
||||||
tmpFile.Close()
|
tmpFile.Close()
|
||||||
|
|
||||||
|
origPath = path.Join(filepath.Base(tmpDirName), filepath.Base(tmpFileName))
|
||||||
|
|
||||||
// Process the checksum
|
// Process the checksum
|
||||||
r, err := archive.Tar(tmpFileName, archive.Uncompressed)
|
r, err := archive.Tar(tmpFileName, archive.Uncompressed)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Загрузка…
Ссылка в новой задаче