mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-30 15:05:27 +00:00
parse executable not found error
This commit is contained in:
parent
a02f10fa3a
commit
4a5a221d8f
@ -233,6 +233,7 @@ func (ds *dockerService) removeContainerLogSymlink(containerID string) error {
|
|||||||
func (ds *dockerService) StartContainer(containerID string) error {
|
func (ds *dockerService) StartContainer(containerID string) error {
|
||||||
err := ds.client.StartContainer(containerID)
|
err := ds.client.StartContainer(containerID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
err = transformStartContainerError(err)
|
||||||
return fmt.Errorf("failed to start container %q: %v", containerID, err)
|
return fmt.Errorf("failed to start container %q: %v", containerID, err)
|
||||||
}
|
}
|
||||||
// Create container log symlink.
|
// Create container log symlink.
|
||||||
|
@ -55,6 +55,10 @@ const (
|
|||||||
var (
|
var (
|
||||||
conflictRE = regexp.MustCompile(`Conflict. (?:.)+ is already in use by container ([0-9a-z]+)`)
|
conflictRE = regexp.MustCompile(`Conflict. (?:.)+ is already in use by container ([0-9a-z]+)`)
|
||||||
|
|
||||||
|
// this is hacky, but extremely common.
|
||||||
|
// if a container starts but the executable file is not found, runc gives a message that matches
|
||||||
|
startRE = regexp.MustCompile(`\\\\\\\"(.*)\\\\\\\": executable file not found`)
|
||||||
|
|
||||||
// Docker changes the security option separator from ':' to '=' in the 1.23
|
// Docker changes the security option separator from ':' to '=' in the 1.23
|
||||||
// API version.
|
// API version.
|
||||||
optsSeparatorChangeVersion = semver.MustParse(securityOptSeparatorChangeVersion)
|
optsSeparatorChangeVersion = semver.MustParse(securityOptSeparatorChangeVersion)
|
||||||
@ -359,6 +363,19 @@ func recoverFromCreationConflictIfNeeded(client libdocker.Interface, createConfi
|
|||||||
return client.CreateContainer(createConfig)
|
return client.CreateContainer(createConfig)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// transformStartContainerError does regex parsing on returned error
|
||||||
|
// for where container runtimes are giving less than ideal error messages.
|
||||||
|
func transformStartContainerError(err error) error {
|
||||||
|
if err == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
matches := startRE.FindStringSubmatch(err.Error())
|
||||||
|
if len(matches) > 0 {
|
||||||
|
return fmt.Errorf("executable not found in $PATH")
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// getSecurityOptSeparator returns the security option separator based on the
|
// getSecurityOptSeparator returns the security option separator based on the
|
||||||
// docker API version.
|
// docker API version.
|
||||||
// TODO: Remove this function along with the relevant code when we no longer
|
// TODO: Remove this function along with the relevant code when we no longer
|
||||||
|
Loading…
Reference in New Issue
Block a user