# docker run -d httpd
docker: Error response from daemon: failed to create task for container: failed to create shim task: failed to create init process I/O: failed to chown stdout: operation not permitted: unknown
Run 'docker run --help' for more information
# docker run --privileged -d httpd
docker: Error response from daemon: failed to create task for container: failed to create shim task: failed to create init process I/O: failed to chown stdout: operation not permitted: unknown
Run 'docker run --help' for more information
А потом я пытаюсь выяснить, что не удалось отбросить stdout из Moby исходный код:
Я пытаюсь запустить Docker в режиме без root, но получил следующую ошибку: < /p> [code]# docker run -d httpd docker: Error response from daemon: failed to create task for container: failed to create shim task: failed to create init process I/O: failed to chown stdout: operation not permitted: unknown
Run 'docker run --help' for more information
# docker run --privileged -d httpd docker: Error response from daemon: failed to create task for container: failed to create shim task: failed to create init process I/O: failed to chown stdout: operation not permitted: unknown
Run 'docker run --help' for more information [/code] А потом я пытаюсь выяснить, что не удалось отбросить stdout из Moby исходный код: [code]package runc
// newPipeIO creates pipe pairs to be used with runc func newPipeIO(uid, gid int, opts ...IOOpt) (i IO, err error) { option := defaultIOOption() for _, o := range opts { o(option) } var ( pipes []*pipe stdin, stdout, stderr *pipe ) // cleanup in case of an error defer func() { if err != nil { for _, p := range pipes { p.Close() } } }() if option.OpenStdin { if stdin, err = newPipe(); err != nil { return nil, err } pipes = append(pipes, stdin) if err = unix.Fchown(int(stdin.r.Fd()), uid, gid); err != nil { // TODO: revert with proper darwin solution, skipping for now // as darwin chown is returning EINVAL on anonymous pipe if runtime.GOOS == "darwin" { logrus.WithError(err).Debug("failed to chown stdin, ignored") } else { return nil, fmt.Errorf("failed to chown stdin: %w", err) } } } if option.OpenStdout { if stdout, err = newPipe(); err != nil { return nil, err } pipes = append(pipes, stdout) if err = unix.Fchown(int(stdout.w.Fd()), uid, gid); err != nil { // TODO: revert with proper darwin solution, skipping for now // as darwin chown is returning EINVAL on anonymous pipe if runtime.GOOS == "darwin" { logrus.WithError(err).Debug("failed to chown stdout, ignored") } else { return nil, fmt.Errorf("failed to chown stdout: %w", err) } } } if option.OpenStderr { if stderr, err = newPipe(); err != nil { return nil, err } pipes = append(pipes, stderr) if err = unix.Fchown(int(stderr.w.Fd()), uid, gid); err != nil { // TODO: revert with proper darwin solution, skipping for now // as darwin chown is returning EINVAL on anonymous pipe if runtime.GOOS == "darwin" { logrus.WithError(err).Debug("failed to chown stderr, ignored") } else { return nil, fmt.Errorf("failed to chown stderr: %w", err) } } } return &pipeIO{ in: stdin, out: stdout, err: stderr, }, nil } < /code> он указывает на этот код: < /p> if option.OpenStdout { if stdout, err = newPipe(); err != nil { return nil, err } pipes = append(pipes, stdout) if err = unix.Fchown(int(stdout.w.Fd()), uid, gid); err != nil { // TODO: revert with proper darwin solution, skipping for now // as darwin chown is returning EINVAL on anonymous pipe if runtime.GOOS == "darwin" { logrus.WithError(err).Debug("failed to chown stdout, ignored") } else { return nil, fmt.Errorf("failed to chown stdout: %w", err) } } } [/code] Теперь попробуйте выяснить, что Unix.fchown из этого файла: [code]package unix