Add shim log pipe for log forwarding to the daemon

A fifo on unix or named pipe on Windows will be provided to the shim.
It can be located inside the `cwd` of the shim named "log".
The shims can use the existing `github.com/containerd/containerd/log` package to log debug messages.
Messages will automatically be output in the containerd's daemon logs with the correct fiels and runtime set.

Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
This commit is contained in:
Michael Crosby
2018-08-06 13:49:09 -04:00
parent 2783a19b10
commit 6ba4ddfdda
9 changed files with 178 additions and 19 deletions

View File

@@ -18,7 +18,9 @@ package v2
import (
"context"
"io"
"io/ioutil"
"os"
"path/filepath"
"time"
@@ -54,6 +56,25 @@ func loadShim(ctx context.Context, bundle *Bundle, events *exchange.Exchange, rt
if err != nil {
return nil, err
}
f, err := openShimLog(ctx, bundle)
if err != nil {
return nil, errors.Wrap(err, "open shim log pipe")
}
defer func() {
if err != nil {
f.Close()
}
}()
// open the log pipe and block until the writer is ready
// this helps with syncronization of the shim
// copy the shim's logs to containerd's output
go func() {
defer f.Close()
if _, err := io.Copy(os.Stderr, f); err != nil {
log.G(ctx).WithError(err).Error("copy shim log")
}
}()
client := ttrpc.NewClient(conn)
client.OnClose(func() { conn.Close() })
s := &shim{