Merge pull request #1095 from tonistiigi/workdir-exists
executor: ignore workdir if already existsdocker-19.03
commit
a2b7cf8379
|
@ -99,9 +99,11 @@ func (w containerdExecutor) Exec(ctx context.Context, meta executor.Meta, root c
|
|||
lm.Unmount()
|
||||
return errors.Wrapf(err, "working dir %s points to invalid target", newp)
|
||||
}
|
||||
if err := idtools.MkdirAllAndChown(newp, 0755, identity); err != nil {
|
||||
lm.Unmount()
|
||||
return errors.Wrapf(err, "failed to create working directory %s", newp)
|
||||
if _, err := os.Stat(newp); err != nil {
|
||||
if err := idtools.MkdirAllAndChown(newp, 0755, identity); err != nil {
|
||||
lm.Unmount()
|
||||
return errors.Wrapf(err, "failed to create working directory %s", newp)
|
||||
}
|
||||
}
|
||||
|
||||
lm.Unmount()
|
||||
|
|
|
@ -236,8 +236,10 @@ func (w *runcExecutor) Exec(ctx context.Context, meta executor.Meta, root cache.
|
|||
if err != nil {
|
||||
return errors.Wrapf(err, "working dir %s points to invalid target", newp)
|
||||
}
|
||||
if err := idtools.MkdirAllAndChown(newp, 0755, identity); err != nil {
|
||||
return errors.Wrapf(err, "failed to create working directory %s", newp)
|
||||
if _, err := os.Stat(newp); err != nil {
|
||||
if err := idtools.MkdirAllAndChown(newp, 0755, identity); err != nil {
|
||||
return errors.Wrapf(err, "failed to create working directory %s", newp)
|
||||
}
|
||||
}
|
||||
|
||||
if err := setOOMScoreAdj(spec); err != nil {
|
||||
|
|
|
@ -108,6 +108,7 @@ var fileOpTests = []integration.Test{
|
|||
testTarContext,
|
||||
testTarContextExternalDockerfile,
|
||||
testWorkdirUser,
|
||||
testWorkdirExists,
|
||||
}
|
||||
|
||||
var securityTests = []integration.Test{}
|
||||
|
@ -805,6 +806,40 @@ RUN [ "$(stat -c "%U %G" /mydir)" == "user user" ]
|
|||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
func testWorkdirExists(t *testing.T, sb integration.Sandbox) {
|
||||
f := getFrontend(t, sb)
|
||||
isFileOp := getFileOp(t, sb)
|
||||
|
||||
dockerfile := []byte(`
|
||||
FROM busybox
|
||||
RUN adduser -D user
|
||||
RUN mkdir /mydir && chown user:user /mydir
|
||||
WORKDIR /mydir
|
||||
RUN [ "$(stat -c "%U %G" /mydir)" == "user user" ]
|
||||
`)
|
||||
|
||||
dir, err := tmpdir(
|
||||
fstest.CreateFile("Dockerfile", dockerfile, 0600),
|
||||
)
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
|
||||
c, err := client.New(context.TODO(), sb.Address())
|
||||
require.NoError(t, err)
|
||||
defer c.Close()
|
||||
|
||||
_, err = f.Solve(context.TODO(), c, client.SolveOpt{
|
||||
FrontendAttrs: map[string]string{
|
||||
"build-arg:BUILDKIT_DISABLE_FILEOP": strconv.FormatBool(!isFileOp),
|
||||
},
|
||||
LocalDirs: map[string]string{
|
||||
builder.DefaultLocalNameDockerfile: dir,
|
||||
builder.DefaultLocalNameContext: dir,
|
||||
},
|
||||
}, nil)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
func testCopyChownCreateDest(t *testing.T, sb integration.Sandbox) {
|
||||
f := getFrontend(t, sb)
|
||||
isFileOp := getFileOp(t, sb)
|
||||
|
|
Loading…
Reference in New Issue