Merge component 'engine' from git@github.com:docker/engine 18.09
This commit is contained in:
@@ -82,8 +82,8 @@ func (b *Backend) Build(ctx context.Context, config backend.BuildConfig) (string
|
||||
if !useBuildKit {
|
||||
stdout := config.ProgressWriter.StdoutFormatter
|
||||
fmt.Fprintf(stdout, "Successfully built %s\n", stringid.TruncateID(imageID))
|
||||
err = tagger.TagImages(image.ID(imageID))
|
||||
}
|
||||
err = tagger.TagImages(image.ID(imageID))
|
||||
return imageID, err
|
||||
}
|
||||
|
||||
|
||||
@@ -375,11 +375,11 @@ func (daemon *Daemon) setupPathsAndSandboxOptions(container *container.Container
|
||||
if container.HostConfig.NetworkMode.IsHost() {
|
||||
// Point to the host files, so that will be copied into the container running in host mode
|
||||
*sboxOptions = append(*sboxOptions, libnetwork.OptionOriginHostsPath("/etc/hosts"))
|
||||
*sboxOptions = append(*sboxOptions, libnetwork.OptionOriginResolvConfPath("/etc/resolv.conf"))
|
||||
} else {
|
||||
*sboxOptions = append(*sboxOptions, libnetwork.OptionOriginResolvConfPath(daemon.configStore.GetResolvConf()))
|
||||
}
|
||||
|
||||
// Copy the host's resolv.conf for the container (/etc/resolv.conf or /run/systemd/resolve/resolv.conf)
|
||||
*sboxOptions = append(*sboxOptions, libnetwork.OptionOriginResolvConfPath(daemon.configStore.GetResolvConf()))
|
||||
|
||||
container.HostsPath, err = container.GetRootResourcePath("hosts")
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"runtime"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
@@ -16,7 +17,7 @@ import (
|
||||
"github.com/docker/docker/pkg/pools"
|
||||
"github.com/docker/docker/pkg/signal"
|
||||
"github.com/docker/docker/pkg/term"
|
||||
specs "github.com/opencontainers/runtime-spec/specs-go"
|
||||
"github.com/opencontainers/runtime-spec/specs-go"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
@@ -217,12 +218,23 @@ func (d *Daemon) ContainerExecStart(ctx context.Context, name string, stdin io.R
|
||||
ec.StreamConfig.NewNopInputPipe()
|
||||
}
|
||||
|
||||
p := &specs.Process{
|
||||
Args: append([]string{ec.Entrypoint}, ec.Args...),
|
||||
Env: ec.Env,
|
||||
Terminal: ec.Tty,
|
||||
Cwd: ec.WorkingDir,
|
||||
p := &specs.Process{}
|
||||
if runtime.GOOS != "windows" {
|
||||
container, err := d.containerdCli.LoadContainer(ctx, ec.ContainerID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
spec, err := container.Spec(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
p = spec.Process
|
||||
}
|
||||
p.Args = append([]string{ec.Entrypoint}, ec.Args...)
|
||||
p.Env = ec.Env
|
||||
p.Cwd = ec.WorkingDir
|
||||
p.Terminal = ec.Tty
|
||||
|
||||
if p.Cwd == "" {
|
||||
p.Cwd = "/"
|
||||
}
|
||||
|
||||
@@ -118,3 +118,18 @@ func TestExec(t *testing.T) {
|
||||
assert.Assert(t, is.Contains(out, "PWD=/tmp"), "exec command not running in expected /tmp working directory")
|
||||
assert.Assert(t, is.Contains(out, "FOO=BAR"), "exec command not running with expected environment variable FOO")
|
||||
}
|
||||
|
||||
func TestExecUser(t *testing.T) {
|
||||
skip.If(t, versions.LessThan(testEnv.DaemonAPIVersion(), "1.39"), "broken in earlier versions")
|
||||
skip.If(t, testEnv.OSType == "windows", "FIXME. Probably needs to wait for container to be in running state.")
|
||||
defer setupTest(t)()
|
||||
ctx := context.Background()
|
||||
client := testEnv.APIClient()
|
||||
|
||||
cID := container.Run(t, ctx, client, container.WithTty(true), container.WithUser("1:1"))
|
||||
|
||||
result, err := container.Exec(ctx, client, cID, []string{"id"})
|
||||
assert.NilError(t, err)
|
||||
|
||||
assert.Assert(t, is.Contains(result.Stdout(), "uid=1(daemon) gid=1(daemon)"), "exec command not running as uid/gid 1")
|
||||
}
|
||||
|
||||
@@ -134,3 +134,10 @@ func WithAutoRemove(c *TestContainerConfig) {
|
||||
}
|
||||
c.HostConfig.AutoRemove = true
|
||||
}
|
||||
|
||||
// WithUser sets the user
|
||||
func WithUser(user string) func(c *TestContainerConfig) {
|
||||
return func(c *TestContainerConfig) {
|
||||
c.Config.User = user
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user