diff --git a/envbuilder.go b/envbuilder.go
index 307a55dd..f87846c7 100644
--- a/envbuilder.go
+++ b/envbuilder.go
@@ -342,6 +342,14 @@ func Run(ctx context.Context, options Options) error {
 		}
 	}
 
+	if options.PushImage {
+		// Make sure the Dockerfile is using the correct directives to run envbuilder
+		buildParams.DockerfileContent = buildParams.DockerfileContent + "\n" +
+			"USER root \n" +
+			"WORKDIR / \n" +
+			"ENTRYPOINT [\"/.envbuilder/bin/envbuilder\"]"
+	}
+
 	HijackLogrus(func(entry *logrus.Entry) {
 		for _, line := range strings.Split(entry.Message, "\r") {
 			options.Logger(notcodersdk.LogLevelInfo, "#%d: %s", stageNumber, color.HiBlackString(line))
diff --git a/integration/integration_test.go b/integration/integration_test.go
index 4b0e82e8..6aedf022 100644
--- a/integration/integration_test.go
+++ b/integration/integration_test.go
@@ -1354,6 +1354,49 @@ COPY --from=a /root/date.txt /date.txt`, testImageAlpine, testImageAlpine),
 	})
 }
 
+func TestDefaultDirectivesOnPushedImage(t *testing.T) {
+	t.Parallel()
+
+	srv := createGitServer(t, gitServerOptions{
+		files: map[string]string{
+			".devcontainer/entrypoint.sh": "#!/bin/sh\necho 'Hello, world!'",
+			".devcontainer/Dockerfile": "FROM " + testImageAlpine + "\n" +
+				"RUN addgroup -S coder && adduser -S coder -G coder \n" +
+				// These should be overridden by the default directives
+				"USER coder\n" +
+				"WORKDIR /app\n" +
+				"ENTRYPOINT [\"./entrypoint.sh\"]",
+			".devcontainer/devcontainer.json": `{
+			"name": "Test",
+			"build": {
+				"dockerfile": "Dockerfile"
+			},
+		}`,
+		},
+	})
+
+	testReg := setupInMemoryRegistry(t, setupInMemoryRegistryOpts{})
+	testRepo := testReg + "/test"
+	ref, err := name.ParseReference(testRepo + ":latest")
+	require.NoError(t, err)
+
+	_, err = runEnvbuilder(t, options{env: []string{
+		envbuilderEnv("GIT_URL", srv.URL),
+		envbuilderEnv("CACHE_REPO", testRepo),
+		envbuilderEnv("PUSH_IMAGE", "1"),
+	}})
+	require.NoError(t, err)
+
+	image, err := remote.Image(ref)
+	require.NoError(t, err, "expected image to be present after build + push")
+	configFile, err := image.ConfigFile()
+	require.NoError(t, err, "expected image to return a config file")
+
+	require.Equal(t, configFile.Config.User, "root", "value does not match any of the possible root user values.")
+	require.Equal(t, configFile.Config.WorkingDir, "/", "expected image to have root working directory")
+	require.Equal(t, configFile.Config.Entrypoint, []string{"/.envbuilder/bin/envbuilder"}, "expected image to have envbuilder entrypoint")
+}
+
 type setupInMemoryRegistryOpts struct {
 	Username string
 	Password string