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:
Guillaume J. Charmes 2014-04-01 14:17:31 -07:00
Родитель 7462cc6479
Коммит 026aebdebb
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B33E4642CB6E3FF3
1 изменённых файлов: 26 добавлений и 2 удалений

Просмотреть файл

@ -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 {