diff --git a/cmd/devcontainer/src/cli.rs b/cmd/devcontainer/src/cli.rs
index 4a590184f..800775591 100644
--- a/cmd/devcontainer/src/cli.rs
+++ b/cmd/devcontainer/src/cli.rs
@@ -168,10 +168,7 @@ pub fn resolve_command_help<'a>(
let mut current = command_help(command)?;
let mut consumed_args = 0;
- loop {
- let Some(next_arg) = args.get(consumed_args) else {
- break;
- };
+ while let Some(next_arg) = args.get(consumed_args) {
let Some(child) = child_command(¤t.path, next_arg) else {
break;
};
diff --git a/cmd/devcontainer/src/commands/common/config_resolution.rs b/cmd/devcontainer/src/commands/common/config_resolution.rs
index e6f763b68..654c9491a 100644
--- a/cmd/devcontainer/src/commands/common/config_resolution.rs
+++ b/cmd/devcontainer/src/commands/common/config_resolution.rs
@@ -101,13 +101,20 @@ pub(crate) fn load_resolved_config(args: &[String]) -> Result<(PathBuf, PathBuf,
})
.or_else(|| {
Some(
- crate::runtime::context::derived_workspace_mount(&workspace_folder, args)
- .map(|derived| derived.remote_workspace_folder)
- .unwrap_or_else(|| {
- crate::runtime::context::default_remote_workspace_folder(Some(
- &workspace_folder,
- ))
- }),
+ if crate::runtime::compose::uses_compose_config(&parsed)
+ && parsed.get("workspaceFolder").is_none()
+ && parsed.get("workspaceMount").is_none()
+ {
+ "/".to_string()
+ } else {
+ crate::runtime::context::derived_workspace_mount(&workspace_folder, args)
+ .map(|derived| derived.remote_workspace_folder)
+ .unwrap_or_else(|| {
+ crate::runtime::context::default_remote_workspace_folder(Some(
+ &workspace_folder,
+ ))
+ })
+ },
)
});
let substituted = config::substitute_local_context(
diff --git a/cmd/devcontainer/src/runtime/compose/args.rs b/cmd/devcontainer/src/runtime/compose/args.rs
index 98f4aa48a..10a372252 100644
--- a/cmd/devcontainer/src/runtime/compose/args.rs
+++ b/cmd/devcontainer/src/runtime/compose/args.rs
@@ -47,10 +47,19 @@ pub(super) fn compose_args_owned(
}
pub(super) fn reject_unsupported_build_options(args: &[String]) -> Result<(), String> {
- for flag in ["--cache-from", "--cache-to", "--platform", "--label"] {
- if compose_build_option_is_present(args, flag) {
- return Err(format!("{flag} not supported for compose builds."));
- }
+ if compose_build_option_is_present(args, "--cache-to") {
+ return Err("--cache-to not supported for compose builds.".to_string());
+ }
+ if compose_build_option_is_present(args, "--platform")
+ || compose_build_option_is_present(args, "--push")
+ {
+ return Err("--platform or --push not supported.".to_string());
+ }
+ if compose_build_option_is_present(args, "--output") {
+ return Err("--output not supported.".to_string());
+ }
+ if compose_build_option_is_present(args, "--label") {
+ return Err("--label not supported for compose builds.".to_string());
}
Ok(())
}
diff --git a/cmd/devcontainer/src/runtime/compose/mod.rs b/cmd/devcontainer/src/runtime/compose/mod.rs
index 74fe6fd94..ffa53891d 100644
--- a/cmd/devcontainer/src/runtime/compose/mod.rs
+++ b/cmd/devcontainer/src/runtime/compose/mod.rs
@@ -41,7 +41,11 @@ pub(crate) fn load_compose_spec(resolved: &ResolvedConfig) -> Result