daemon: handle EISDIR error from runtime
Go 1.20 made a change to the behaviour of package "os/exec" which was not mentioned in the release notes:2b8f214094
Attempts to execute a directory now return syscall.EISDIR instead of syscall.EACCESS. Check for EISDIR errors from the runtime and fudge the returned error message to maintain compatibility with existing versions of docker/cli when using a version of runc compiled with Go 1.20+. Signed-off-by: Cory Snider <csnider@mirantis.com> (cherry picked from commit713e02e03e
) Signed-off-by: Cory Snider <csnider@mirantis.com>
This commit is contained in:
parent
d74ef58c59
commit
da10937926
1 changed files with 11 additions and 0 deletions
|
@ -154,6 +154,17 @@ func translateContainerdStartErr(cmd string, setExitCode func(int), err error) e
|
|||
retErr = startInvalidConfigError(errDesc)
|
||||
}
|
||||
|
||||
// Go 1.20 changed the error for attempting to execute a directory from
|
||||
// syscall.EACCESS to syscall.EISDIR. Unfortunately docker/cli checks
|
||||
// whether the error message contains syscall.EACCESS.Error() to
|
||||
// determine whether to exit with code 126 or 125, so we have little
|
||||
// choice but to fudge the error string.
|
||||
if contains(errDesc, syscall.EISDIR.Error()) {
|
||||
errDesc += ": " + syscall.EACCES.Error()
|
||||
setExitCode(126)
|
||||
return startInvalidConfigError(errDesc)
|
||||
}
|
||||
|
||||
// attempted to mount a file onto a directory, or a directory onto a file, maybe from user specified bind mounts
|
||||
if contains(errDesc, syscall.ENOTDIR.Error()) {
|
||||
errDesc += ": Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type"
|
||||
|
|
Loading…
Reference in a new issue