Merge component 'engine' from git@github.com:docker/engine master
This commit is contained in:
@ -365,7 +365,8 @@ func dispatchRun(d dispatchRequest, c *instructions.RunCommand) error {
|
||||
runConfig := copyRunConfig(stateRunConfig,
|
||||
withCmd(cmdFromArgs),
|
||||
withEnv(append(stateRunConfig.Env, buildArgs...)),
|
||||
withEntrypointOverride(saveCmd, strslice.StrSlice{""}))
|
||||
withEntrypointOverride(saveCmd, strslice.StrSlice{""}),
|
||||
withoutHealthcheck())
|
||||
|
||||
// set config as already being escaped, this prevents double escaping on windows
|
||||
runConfig.ArgsEscaped = true
|
||||
|
||||
@ -473,3 +473,64 @@ func TestRunWithBuildArgs(t *testing.T) {
|
||||
// Check that runConfig.Cmd has not been modified by run
|
||||
assert.Check(t, is.DeepEqual(origCmd, sb.state.runConfig.Cmd))
|
||||
}
|
||||
|
||||
func TestRunIgnoresHealthcheck(t *testing.T) {
|
||||
b := newBuilderWithMockBackend()
|
||||
args := NewBuildArgs(make(map[string]*string))
|
||||
sb := newDispatchRequest(b, '`', nil, args, newStagesBuildResults())
|
||||
b.disableCommit = false
|
||||
|
||||
origCmd := strslice.StrSlice([]string{"cmd", "in", "from", "image"})
|
||||
|
||||
imageCache := &mockImageCache{
|
||||
getCacheFunc: func(parentID string, cfg *container.Config) (string, error) {
|
||||
return "", nil
|
||||
},
|
||||
}
|
||||
|
||||
mockBackend := b.docker.(*MockBackend)
|
||||
mockBackend.makeImageCacheFunc = func(_ []string) builder.ImageCache {
|
||||
return imageCache
|
||||
}
|
||||
b.imageProber = newImageProber(mockBackend, nil, false)
|
||||
mockBackend.getImageFunc = func(_ string) (builder.Image, builder.ROLayer, error) {
|
||||
return &mockImage{
|
||||
id: "abcdef",
|
||||
config: &container.Config{Cmd: origCmd},
|
||||
}, nil, nil
|
||||
}
|
||||
mockBackend.containerCreateFunc = func(config types.ContainerCreateConfig) (container.ContainerCreateCreatedBody, error) {
|
||||
return container.ContainerCreateCreatedBody{ID: "12345"}, nil
|
||||
}
|
||||
mockBackend.commitFunc = func(cfg backend.CommitConfig) (image.ID, error) {
|
||||
return "", nil
|
||||
}
|
||||
from := &instructions.Stage{BaseName: "abcdef"}
|
||||
err := initializeStage(sb, from)
|
||||
assert.NilError(t, err)
|
||||
|
||||
expectedTest := []string{"CMD-SHELL", "curl -f http://localhost/ || exit 1"}
|
||||
cmd := &instructions.HealthCheckCommand{
|
||||
Health: &container.HealthConfig{
|
||||
Test: expectedTest,
|
||||
},
|
||||
}
|
||||
assert.NilError(t, dispatch(sb, cmd))
|
||||
assert.Assert(t, sb.state.runConfig.Healthcheck != nil)
|
||||
|
||||
mockBackend.containerCreateFunc = func(config types.ContainerCreateConfig) (container.ContainerCreateCreatedBody, error) {
|
||||
// Check the Healthcheck is disabled.
|
||||
assert.Check(t, is.DeepEqual([]string{"NONE"}, config.Config.Healthcheck.Test))
|
||||
return container.ContainerCreateCreatedBody{ID: "123456"}, nil
|
||||
}
|
||||
|
||||
sb.state.buildArgs.AddArg("one", strPtr("two"))
|
||||
run := &instructions.RunCommand{
|
||||
ShellDependantCmdLine: instructions.ShellDependantCmdLine{
|
||||
CmdLine: strslice.StrSlice{"echo foo"},
|
||||
PrependShell: true,
|
||||
},
|
||||
}
|
||||
assert.NilError(t, dispatch(sb, run))
|
||||
assert.Check(t, is.DeepEqual(expectedTest, sb.state.runConfig.Healthcheck.Test))
|
||||
}
|
||||
|
||||
@ -343,6 +343,18 @@ func withEntrypointOverride(cmd []string, entrypoint []string) runConfigModifier
|
||||
}
|
||||
}
|
||||
|
||||
// withoutHealthcheck disables healthcheck.
|
||||
//
|
||||
// The dockerfile RUN instruction expect to run without healthcheck
|
||||
// so the runConfig Healthcheck needs to be disabled.
|
||||
func withoutHealthcheck() runConfigModifier {
|
||||
return func(runConfig *container.Config) {
|
||||
runConfig.Healthcheck = &container.HealthConfig{
|
||||
Test: []string{"NONE"},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func copyRunConfig(runConfig *container.Config, modifiers ...runConfigModifier) *container.Config {
|
||||
copy := *runConfig
|
||||
copy.Cmd = copyStringSlice(runConfig.Cmd)
|
||||
|
||||
@ -180,7 +180,7 @@ func (p *Controller) Wait(ctx context.Context) error {
|
||||
case <-ctx.Done():
|
||||
return ctx.Err()
|
||||
case e := <-events:
|
||||
p.logger.Debugf("got event %#T", e)
|
||||
p.logger.Debugf("got event %T", e)
|
||||
|
||||
switch e.(type) {
|
||||
case plugin.EventEnable:
|
||||
|
||||
@ -538,7 +538,7 @@ func (daemon *Daemon) DaemonLeavesCluster() {
|
||||
select {
|
||||
case <-done:
|
||||
case <-time.After(5 * time.Second):
|
||||
logrus.Warnf("timeout while waiting for ingress network removal")
|
||||
logrus.Warn("timeout while waiting for ingress network removal")
|
||||
}
|
||||
} else {
|
||||
logrus.Warnf("failed to initiate ingress network removal: %v", err)
|
||||
|
||||
@ -646,13 +646,13 @@ func (daemon *Daemon) initRuntimes(runtimes map[string]types.Runtime) (err error
|
||||
os.RemoveAll(runtimeDir + "-old")
|
||||
tmpDir, err := ioutils.TempDir(daemon.configStore.Root, "gen-runtimes")
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "failed to get temp dir to generate runtime scripts")
|
||||
return errors.Wrap(err, "failed to get temp dir to generate runtime scripts")
|
||||
}
|
||||
defer func() {
|
||||
if err != nil {
|
||||
if err1 := os.RemoveAll(tmpDir); err1 != nil {
|
||||
logrus.WithError(err1).WithField("dir", tmpDir).
|
||||
Warnf("failed to remove tmp dir")
|
||||
Warn("failed to remove tmp dir")
|
||||
}
|
||||
return
|
||||
}
|
||||
@ -661,12 +661,12 @@ func (daemon *Daemon) initRuntimes(runtimes map[string]types.Runtime) (err error
|
||||
return
|
||||
}
|
||||
if err = os.Rename(tmpDir, runtimeDir); err != nil {
|
||||
err = errors.Wrapf(err, "failed to setup runtimes dir, new containers may not start")
|
||||
err = errors.Wrap(err, "failed to setup runtimes dir, new containers may not start")
|
||||
return
|
||||
}
|
||||
if err = os.RemoveAll(runtimeDir + "-old"); err != nil {
|
||||
logrus.WithError(err).WithField("dir", tmpDir).
|
||||
Warnf("failed to remove old runtimes dir")
|
||||
Warn("failed to remove old runtimes dir")
|
||||
}
|
||||
}()
|
||||
|
||||
@ -1126,7 +1126,7 @@ func setupRemappedRoot(config *config.Config) (*idtools.IDMappings, error) {
|
||||
|
||||
mappings, err := idtools.NewIDMappings(username, groupname)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "Can't create ID mappings: %v")
|
||||
return nil, errors.Wrap(err, "Can't create ID mappings")
|
||||
}
|
||||
return mappings, nil
|
||||
}
|
||||
|
||||
@ -373,7 +373,7 @@ func atomicRemove(source string) error {
|
||||
case os.IsExist(err):
|
||||
// Got error saying the target dir already exists, maybe the source doesn't exist due to a previous (failed) remove
|
||||
if _, e := os.Stat(source); !os.IsNotExist(e) {
|
||||
return errors.Wrapf(err, "target rename dir '%s' exists but should not, this needs to be manually cleaned up")
|
||||
return errors.Wrapf(err, "target rename dir %q exists but should not, this needs to be manually cleaned up", target)
|
||||
}
|
||||
default:
|
||||
return errors.Wrapf(err, "error preparing atomic delete")
|
||||
|
||||
@ -108,7 +108,7 @@ func (daemon *Daemon) killWithSignal(container *containerpkg.Container, sig int)
|
||||
if unpause {
|
||||
// above kill signal will be sent once resume is finished
|
||||
if err := daemon.containerd.Resume(context.Background(), container.ID); err != nil {
|
||||
logrus.Warn("Cannot unpause container %s: %s", container.ID, err)
|
||||
logrus.Warnf("Cannot unpause container %s: %s", container.ID, err)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -332,7 +332,7 @@ func (w *LogFile) ReadLogs(config logger.ReadConfig, watcher *logger.LogWatcher)
|
||||
if strings.HasSuffix(fileName, tmpLogfileSuffix) {
|
||||
err := w.filesRefCounter.Dereference(fileName)
|
||||
if err != nil {
|
||||
logrus.Errorf("Failed to dereference the log file %q: %v", fileName, err)
|
||||
logrus.Errorf("Failed to dereference log file %q: %v", fileName, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -364,7 +364,7 @@ func (w *LogFile) openRotatedFiles(config logger.ReadConfig) (files []*os.File,
|
||||
if strings.HasSuffix(f.Name(), tmpLogfileSuffix) {
|
||||
err := os.Remove(f.Name())
|
||||
if err != nil && !os.IsNotExist(err) {
|
||||
logrus.Warningf("Failed to remove the logfile %q: %v", f.Name, err)
|
||||
logrus.Warnf("Failed to remove logfile: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -436,7 +436,7 @@ func decompressfile(fileName, destFileName string, since time.Time) (*os.File, e
|
||||
rs.Close()
|
||||
rErr := os.Remove(rs.Name())
|
||||
if rErr != nil && !os.IsNotExist(rErr) {
|
||||
logrus.Errorf("Failed to remove the logfile %q: %v", rs.Name(), rErr)
|
||||
logrus.Errorf("Failed to remove logfile: %v", rErr)
|
||||
}
|
||||
return nil, errors.Wrap(err, "error while copying decompressed log stream to file")
|
||||
}
|
||||
@ -561,7 +561,7 @@ func followLogs(f *os.File, logWatcher *logger.LogWatcher, notifyRotate chan int
|
||||
}
|
||||
return errRetry
|
||||
case err := <-fileWatcher.Errors():
|
||||
logrus.Debug("logger got error watching file: %v", err)
|
||||
logrus.Debugf("logger got error watching file: %v", err)
|
||||
// Something happened, let's try and stay alive and create a new watcher
|
||||
if retries <= 5 {
|
||||
fileWatcher.Close()
|
||||
|
||||
@ -138,7 +138,7 @@ func (daemon *Daemon) ProcessEvent(id string, e libcontainerd.EventType, ei libc
|
||||
"container": c.ID,
|
||||
"exec-id": ei.ProcessID,
|
||||
"exec-pid": ei.Pid,
|
||||
}).Warnf("Ignoring Exit Event, no such exec command found")
|
||||
}).Warn("Ignoring Exit Event, no such exec command found")
|
||||
}
|
||||
case libcontainerd.EventStart:
|
||||
c.Lock()
|
||||
|
||||
@ -186,7 +186,7 @@ func (daemon *Daemon) reloadClusterDiscovery(conf *config.Config, attributes map
|
||||
}
|
||||
netOptions, err := daemon.networkOptions(daemon.configStore, daemon.PluginStore, nil)
|
||||
if err != nil {
|
||||
logrus.WithError(err).Warnf("failed to get options with network controller")
|
||||
logrus.WithError(err).Warn("failed to get options with network controller")
|
||||
return nil
|
||||
}
|
||||
err = daemon.netController.ReloadConfiguration(netOptions...)
|
||||
|
||||
@ -37,7 +37,7 @@ func (daemon *Daemon) containerUnpause(container *container.Container) error {
|
||||
daemon.LogContainerEvent(container, "unpause")
|
||||
|
||||
if err := container.CheckpointTo(daemon.containersReplica); err != nil {
|
||||
logrus.WithError(err).Warnf("could not save container to disk")
|
||||
logrus.WithError(err).Warn("could not save container to disk")
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
|
||||
GOMETALINTER_COMMIT=bfcc1d6942136fd86eb6f1a6fb328de8398fbd80
|
||||
GOMETALINTER_COMMIT=v2.0.6
|
||||
|
||||
install_gometalinter() {
|
||||
echo "Installing gometalinter version $GOMETALINTER_COMMIT"
|
||||
|
||||
Reference in New Issue
Block a user