@@ -239,6 +239,12 @@ func ExecInDevContainer(containerID string, workDir string, args []string) error
239239 if err != nil {
240240 return err
241241 }
242+ if userName == "" {
243+ userName , err = getUserNameFromRunningContainer (containerID )
244+ if err != nil {
245+ return err
246+ }
247+ }
242248
243249 statusWriter .Printf ("Checking for SSH_AUTH_SOCK" )
244250 sshAuthSockValue , err := getSshAuthSockValue (containerID )
@@ -485,3 +491,28 @@ func testContainerPathExists(containerID string, path string) (bool, error) {
485491 response := strings .TrimSpace (string (buf ))
486492 return response == "0" , nil
487493}
494+
495+ func getUserNameFromRunningContainer (containerID string ) (string , error ) {
496+ dockerArgs := []string {"inspect" , containerID , "--format" , "{{index .Config.Labels \" devcontainer.metadata\" }}" }
497+ dockerCmd := exec .Command ("docker" , dockerArgs ... )
498+ buf , err := dockerCmd .CombinedOutput ()
499+ if err != nil {
500+ errMessage := string (buf )
501+ return "" , fmt .Errorf ("Docker exec error: %s (%s)" , err , strings .TrimSpace (errMessage ))
502+ }
503+
504+ var metadata []interface {}
505+ err = json .Unmarshal (buf , & metadata )
506+ if err != nil {
507+ return "" , nil
508+ }
509+
510+ for _ , value := range metadata {
511+ if valueMap , ok := value .(map [string ]interface {}); ok {
512+ if userName , ok := valueMap ["remoteUser" ]; ok {
513+ return userName .(string ), nil
514+ }
515+ }
516+ }
517+ return "" , nil
518+ }
0 commit comments