Merge pull request #31741 from mlaventure/cleanup-tmp-on-start
Cleanup docker tmp dir on start
This commit is contained in:
commit
f16d1a47cc
1 changed files with 20 additions and 3 deletions
|
@ -505,7 +505,7 @@ func NewDaemon(config *config.Config, registryService registry.Service, containe
|
||||||
}
|
}
|
||||||
|
|
||||||
// set up the tmpDir to use a canonical path
|
// set up the tmpDir to use a canonical path
|
||||||
tmp, err := tempDir(config.Root, rootUID, rootGID)
|
tmp, err := prepareTempDir(config.Root, rootUID, rootGID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("Unable to get the TempDir under %s: %s", config.Root, err)
|
return nil, fmt.Errorf("Unable to get the TempDir under %s: %s", config.Root, err)
|
||||||
}
|
}
|
||||||
|
@ -924,12 +924,29 @@ func (daemon *Daemon) GetRemappedUIDGID() (int, int) {
|
||||||
return uid, gid
|
return uid, gid
|
||||||
}
|
}
|
||||||
|
|
||||||
// tempDir returns the default directory to use for temporary files.
|
// prepareTempDir prepares and returns the default directory to use
|
||||||
func tempDir(rootDir string, rootUID, rootGID int) (string, error) {
|
// for temporary files.
|
||||||
|
// If it doesn't exist, it is created. If it exists, its content is removed.
|
||||||
|
func prepareTempDir(rootDir string, rootUID, rootGID int) (string, error) {
|
||||||
var tmpDir string
|
var tmpDir string
|
||||||
if tmpDir = os.Getenv("DOCKER_TMPDIR"); tmpDir == "" {
|
if tmpDir = os.Getenv("DOCKER_TMPDIR"); tmpDir == "" {
|
||||||
tmpDir = filepath.Join(rootDir, "tmp")
|
tmpDir = filepath.Join(rootDir, "tmp")
|
||||||
|
newName := tmpDir + "-old"
|
||||||
|
if err := os.Rename(tmpDir, newName); err != nil {
|
||||||
|
go func() {
|
||||||
|
if err := os.RemoveAll(newName); err != nil {
|
||||||
|
logrus.Warnf("failed to delete old tmp directory: %s", newName)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
} else {
|
||||||
|
logrus.Warnf("failed to rename %s for background deletion: %s. Deleting synchronously", tmpDir, err)
|
||||||
|
if err := os.RemoveAll(tmpDir); err != nil {
|
||||||
|
logrus.Warnf("failed to delete old tmp directory: %s", tmpDir)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
// We don't remove the content of tmpdir if it's not the default,
|
||||||
|
// it may hold things that do not belong to us.
|
||||||
return tmpDir, idtools.MkdirAllAs(tmpDir, 0700, rootUID, rootGID)
|
return tmpDir, idtools.MkdirAllAs(tmpDir, 0700, rootUID, rootGID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue