1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

resolve the config file from the sudo user

Signed-off-by: Antonio Murdaca <runcom@redhat.com>
This commit is contained in:
Antonio Murdaca 2016-02-22 14:48:25 +01:00
parent 074442df7a
commit afde6450ee
4 changed files with 30 additions and 3 deletions

View file

@ -29,9 +29,20 @@ var (
configDir = os.Getenv("DOCKER_CONFIG") configDir = os.Getenv("DOCKER_CONFIG")
) )
func getDefaultConfigDir(confFile string) string {
confDir := filepath.Join(homedir.Get(), confFile)
// if the directory doesn't exist, maybe we called docker with sudo
if _, err := os.Stat(configDir); err != nil {
if os.IsNotExist(err) {
return filepath.Join(homedir.GetWithSudoUser(), confFile)
}
}
return confDir
}
func init() { func init() {
if configDir == "" { if configDir == "" {
configDir = filepath.Join(homedir.Get(), ".docker") configDir = getDefaultConfigDir(".docker")
} }
} }
@ -178,7 +189,7 @@ func Load(configDir string) (*ConfigFile, error) {
} }
// Can't find latest config file so check for the old one // Can't find latest config file so check for the old one
confFile := filepath.Join(homedir.Get(), oldConfigfile) confFile := getDefaultConfigDir(oldConfigfile)
if _, err := os.Stat(confFile); err != nil { if _, err := os.Stat(confFile); err != nil {
return &configFile, nil //missing file is not an error return &configFile, nil //missing file is not an error
} }

View file

@ -78,6 +78,9 @@ For example:
Instructs Docker to use the configuration files in your `~/testconfigs/` Instructs Docker to use the configuration files in your `~/testconfigs/`
directory when running the `ps` command. directory when running the `ps` command.
> **Note**: If you run docker commands with `sudo`, Docker first looks for a configuration
> file in `/root/.docker/`, before looking in `~/.docker/` for the user that did the sudo call.
Docker manages most of the files in the configuration directory Docker manages most of the files in the configuration directory
and you should not modify them. However, you *can modify* the and you should not modify them. However, you *can modify* the
`config.json` file to control certain aspects of how the `docker` `config.json` file to control certain aspects of how the `docker`

View file

@ -142,7 +142,7 @@ func rawJSON(value interface{}) *json.RawMessage {
// ValidateID checks whether an ID string is a valid image ID. // ValidateID checks whether an ID string is a valid image ID.
func ValidateID(id string) error { func ValidateID(id string) error {
if ok := validHex.MatchString(id); !ok { if ok := validHex.MatchString(id); !ok {
return fmt.Errorf("image ID '%s' is invalid ", id) return fmt.Errorf("image ID %q is invalid", id)
} }
return nil return nil
} }

View file

@ -29,6 +29,19 @@ func Get() string {
return home return home
} }
// GetWithSudoUser returns the home directory of the user who called sudo (if
// available, retrieved from $SUDO_USER). It fallbacks to Get if any error occurs.
// Returned path should be used with "path/filepath" to form new paths.
func GetWithSudoUser() string {
sudoUser := os.Getenv("SUDO_USER")
if sudoUser != "" {
if user, err := user.LookupUser(sudoUser); err == nil {
return user.Home
}
}
return Get()
}
// GetShortcutString returns the string that is shortcut to user's home directory // GetShortcutString returns the string that is shortcut to user's home directory
// in the native shell of the platform running on. // in the native shell of the platform running on.
func GetShortcutString() string { func GetShortcutString() string {