diff --git a/cmd/sketch/main.go b/cmd/sketch/main.go
index 43cb5d2..d66b995 100644
--- a/cmd/sketch/main.go
+++ b/cmd/sketch/main.go
@@ -154,6 +154,7 @@
 	outsideOS         string
 	outsideWorkingDir string
 	sketchBinaryLinux string
+	dockerArgs        string
 }
 
 // parseCLIFlags parses all command-line flags and returns a CLIFlags struct
@@ -178,6 +179,7 @@
 	flag.IntVar(&flags.sshPort, "ssh_port", 0, "the host port number that the container's ssh server will listen on, or a randomly chosen port if this value is 0")
 	flag.BoolVar(&flags.forceRebuild, "force-rebuild-container", false, "rebuild Docker container")
 	flag.StringVar(&flags.initialCommit, "initial-commit", "HEAD", "the git commit reference to use as starting point (incompatible with -unsafe)")
+	flag.StringVar(&flags.dockerArgs, "docker-args", "", "additional arguments to pass to the docker create command (e.g., --memory=2g --cpus=2)")
 
 	// Flags geared towards sketch developers or sketch internals:
 	flag.StringVar(&flags.gitUsername, "git-username", "", "(internal) username for git commits")
@@ -250,6 +252,7 @@
 		Prompt:            flags.prompt,
 		InitialCommit:     flags.initialCommit,
 		Verbose:           flags.verbose,
+		DockerArgs:        flags.dockerArgs,
 	}
 
 	if err := dockerimg.LaunchContainer(ctx, config); err != nil {
diff --git a/dockerimg/dockerimg.go b/dockerimg/dockerimg.go
index 0a070cf..5e49392 100644
--- a/dockerimg/dockerimg.go
+++ b/dockerimg/dockerimg.go
@@ -91,6 +91,9 @@
 
 	// Verbose enables verbose output
 	Verbose bool
+
+	// DockerArgs are additional arguments to pass to the docker create command
+	DockerArgs string
 }
 
 // LaunchContainer creates a docker container for a project, installs sketch and opens a connection to it.
@@ -472,6 +475,17 @@
 	if config.OneShot {
 		cmdArgs = append(cmdArgs, "-one-shot")
 	}
+
+	// Add additional docker arguments if provided
+	if config.DockerArgs != "" {
+		// Parse space-separated docker arguments with support for quotes and escaping
+		args := parseDockerArgs(config.DockerArgs)
+		// Insert arguments after "create" but before other arguments
+		for i := len(args) - 1; i >= 0; i-- {
+			cmdArgs = append(cmdArgs[:1], append([]string{args[i]}, cmdArgs[1:]...)...)
+		}
+	}
+
 	if out, err := combinedOutput(ctx, "docker", cmdArgs...); err != nil {
 		return fmt.Errorf("docker create: %s, %w", out, err)
 	}
@@ -800,3 +814,69 @@
 	}
 	return envVars
 }
+
+// parseDockerArgs parses a string containing space-separated Docker arguments into an array of strings.
+// It handles quoted arguments and escaped characters.
+//
+// Examples:
+//
+//	--memory=2g --cpus=2                 -> ["--memory=2g", "--cpus=2"]
+//	--label="my label" --env=FOO=bar     -> ["--label=my label", "--env=FOO=bar"]
+//	--env="KEY=\"quoted value\""         -> ["--env=KEY=\"quoted value\""]
+func parseDockerArgs(args string) []string {
+	if args = strings.TrimSpace(args); args == "" {
+		return []string{}
+	}
+
+	var result []string
+	var current strings.Builder
+	inQuotes := false
+	escapeNext := false
+	quoteChar := rune(0)
+
+	for _, char := range args {
+		if escapeNext {
+			current.WriteRune(char)
+			escapeNext = false
+			continue
+		}
+
+		if char == '\\' {
+			escapeNext = true
+			continue
+		}
+
+		if char == '"' || char == '\'' {
+			if !inQuotes {
+				inQuotes = true
+				quoteChar = char
+				continue
+			} else if char == quoteChar {
+				inQuotes = false
+				quoteChar = rune(0)
+				continue
+			}
+			// Non-matching quote character inside quotes
+			current.WriteRune(char)
+			continue
+		}
+
+		// Space outside of quotes is an argument separator
+		if char == ' ' && !inQuotes {
+			if current.Len() > 0 {
+				result = append(result, current.String())
+				current.Reset()
+			}
+			continue
+		}
+
+		current.WriteRune(char)
+	}
+
+	// Add the last argument if there is one
+	if current.Len() > 0 {
+		result = append(result, current.String())
+	}
+
+	return result
+}
diff --git a/dockerimg/parse_args_test.go b/dockerimg/parse_args_test.go
new file mode 100644
index 0000000..7badcb7
--- /dev/null
+++ b/dockerimg/parse_args_test.go
@@ -0,0 +1,69 @@
+package dockerimg
+
+import (
+	"reflect"
+	"testing"
+)
+
+func TestParseDockerArgs(t *testing.T) {
+	tests := []struct {
+		name     string
+		input    string
+		expected []string
+	}{
+		{
+			name:     "empty string",
+			input:    "",
+			expected: []string{},
+		},
+		{
+			name:     "single argument",
+			input:    "--memory=2g",
+			expected: []string{"--memory=2g"},
+		},
+		{
+			name:     "multiple arguments",
+			input:    "--memory=2g --cpus=2",
+			expected: []string{"--memory=2g", "--cpus=2"},
+		},
+		{
+			name:     "arguments with double quotes",
+			input:    "--label=\"my label\" --env=FOO=bar",
+			expected: []string{"--label=my label", "--env=FOO=bar"},
+		},
+		{
+			name:     "arguments with single quotes",
+			input:    "--label='my label' --env=FOO=bar",
+			expected: []string{"--label=my label", "--env=FOO=bar"},
+		},
+		{
+			name:     "nested quotes",
+			input:    "--env=\"KEY=\\\"quoted value\\\"\"",
+			expected: []string{"--env=KEY=\"quoted value\""},
+		},
+		{
+			name:     "mixed quotes",
+			input:    "--env=\"mixed 'quotes'\" --label='single \"quotes\"'",
+			expected: []string{"--env=mixed 'quotes'", "--label=single \"quotes\""},
+		},
+		{
+			name:     "escaped spaces",
+			input:    "--label=my\\ label --env=FOO=bar",
+			expected: []string{"--label=my label", "--env=FOO=bar"},
+		},
+		{
+			name:     "multiple spaces",
+			input:    "  --memory=2g   --cpus=2  ",
+			expected: []string{"--memory=2g", "--cpus=2"},
+		},
+	}
+
+	for _, tc := range tests {
+		t.Run(tc.name, func(t *testing.T) {
+			result := parseDockerArgs(tc.input)
+			if !reflect.DeepEqual(result, tc.expected) {
+				t.Errorf("Expected %v, got %v", tc.expected, result)
+			}
+		})
+	}
+}
