This tests ensures that the content from a dir within a build is carried
over even if VOLUME for that dir is specified in the Dockerfile. This
test ensures this long standing functionality.
Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
... | ... |
@@ -3914,3 +3914,37 @@ RUN [ ! -e /injected ]`, |
3914 | 3914 |
|
3915 | 3915 |
logDone("build - xz host is being used") |
3916 | 3916 |
} |
3917 |
+ |
|
3918 |
+func TestBuildVolumesRetainContents(t *testing.T) { |
|
3919 |
+ var ( |
|
3920 |
+ name = "testbuildvolumescontent" |
|
3921 |
+ expected = "some text" |
|
3922 |
+ ) |
|
3923 |
+ defer deleteImages(name) |
|
3924 |
+ ctx, err := fakeContext(` |
|
3925 |
+FROM busybox |
|
3926 |
+COPY content /foo/file |
|
3927 |
+VOLUME /foo |
|
3928 |
+CMD cat /foo/file`, |
|
3929 |
+ map[string]string{ |
|
3930 |
+ "content": expected, |
|
3931 |
+ }) |
|
3932 |
+ if err != nil { |
|
3933 |
+ t.Fatal(err) |
|
3934 |
+ } |
|
3935 |
+ defer ctx.Close() |
|
3936 |
+ |
|
3937 |
+ if _, err := buildImageFromContext(name, ctx, false); err != nil { |
|
3938 |
+ t.Fatal(err) |
|
3939 |
+ } |
|
3940 |
+ |
|
3941 |
+ out, _, err := runCommandWithOutput(exec.Command(dockerBinary, "run", "--rm", name)) |
|
3942 |
+ if err != nil { |
|
3943 |
+ t.Fatal(err) |
|
3944 |
+ } |
|
3945 |
+ if out != expected { |
|
3946 |
+ t.Fatalf("expected file contents for /foo/file to be %q but received %q", expected, out) |
|
3947 |
+ } |
|
3948 |
+ |
|
3949 |
+ logDone("build - volumes retain contents in build") |
|
3950 |
+} |