Skip to content

Fix persistent container endpoint allocation - #17960

Merged
Jose Perez Rodriguez (joperezr) merged 5 commits into
release/13.4from
danegsta/persistent-container-endpoints
Jun 5, 2026
Merged

Jose Perez Rodriguez (joperezr) merged 5 commits into
release/13.4from
danegsta/persistent-container-endpoints

Conversation

@danegsta

@danegsta David Negstad (danegsta) commented Jun 5, 2026 •

Copy link
Copy Markdown
Member

Description

Persistent container endpoints should behave like normal container endpoints unless the app explicitly opts out of proxy support. This keeps persistent containers compatible with integrations that depend on endpoint allocation happening before resource startup.

This change updates DCP endpoint allocation so persistent containers default to proxied endpoints unless isProxied: false or WithEndpointProxySupport(false) is applied. It also removes the delayed proxyless container allocation path and restores the previous target-port fallback: proxyless container endpoints with a targetPort and no public port immediately use the target port as the allocated host/public port.

For HTTP health checks, this restores the 13.3 timing split: endpoint existence is still validated during ResourceEndpointsAllocatedEvent, while the health-check URI is bound during BeforeResourceStartedEvent. That matters for supported surrogate-resource integrations such as the KeyVault emulator, where the surrogate forwards BeforeResourceStartedEvent but not ResourceEndpointsAllocatedEvent.

The endpoint allocation event is intentionally kept on the 13.4 BlockingSequential dispatch behavior, rather than matching 13.3's NonBlockingConcurrent dispatch. That preserves 13.4 exception propagation and ensures allocation subscribers complete before startup continues.

User-facing behavior

Proxyless container endpoints now resolve immediately when only a target port is specified:

builder.AddContainer("cache", "redis")
       .WithEndpoint(targetPort: 6379, isProxied: false);

That endpoint allocates public/host port 6379 instead of waiting for a delayed allocation update. Persistent executables keep their existing default proxyless behavior.

Breaking changes

This changes endpoint allocation timing and default endpoint behavior for container scenarios. Users who depended on delayed runtime allocation for proxyless container endpoints without an explicit public port should specify the desired public port explicitly or rely on the restored target-port default.

Validation included the DCP executor test suite and a real KeyVault emulator smoke test for both session and persistent container lifetimes.

Checklist

  • Is this feature complete?
    • Yes. Ready to ship.
    • No. Follow-up changes expected.
  • Are you including unit tests for the changes and scenario tests if relevant?
    • Yes
    • No
  • Did you add public API?
    • Yes
      • If yes, did you have an API Review for it?
        • Yes
        • No
      • Did you add <remarks /> and <code /> elements on your triple slash comments?
        • Yes
        • No
    • No
  • Does the change make any security assumptions or guarantees?
    • Yes
      • If yes, have you done a threat model and had a security review?
        • Yes
        • No
    • No

Default persistent container endpoints to proxied unless proxy support is disabled, and remove delayed proxyless container endpoint allocation in favor of target-port public port defaults. Preserve endpoint and connection string event timing from release/13.3 and add coverage for the KeyVault emulator-style health check path.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actions

github-actions Bot commented Jun 5, 2026 •

Copy link
Copy Markdown
Contributor

🚀 Dogfood this PR with:

⚠️ WARNING: Do not do this without first carefully reviewing the code of this PR to satisfy yourself it is safe.

curl -fsSL https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 17960

Or

  • Run remotely in PowerShell:
iex "& { $(irm https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 17960"

Set HTTP health check URIs during BeforeResourceStartedEvent again so surrogate resource builders that forward startup events continue to initialize their health checks. Add DCP coverage for the KeyVault-emulator-style surrogate pattern.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adjusts DCP endpoint allocation to make persistent container endpoints behave like normal container endpoints (proxied by default), removes the delayed proxyless allocation mechanism, and restores the proxyless targetPort-as-hostPort default. Also re-splits HTTP health check work so endpoint existence is validated on ResourceEndpointsAllocatedEvent, while the health check URI is bound on BeforeResourceStartedEvent for surrogate-forwarding scenarios.

Changes:

  • Default persistent container endpoints to proxied unless explicitly proxyless / proxy support disabled; restore proxyless targetPort host-port defaulting.
  • Remove delayed/on-demand proxyless container port allocation plumbing and related test fake behavior.
  • Move HTTP health check URI binding to BeforeResourceStartedEvent, keeping endpoint existence validation during ResourceEndpointsAllocatedEvent.

Reviewed changes

Copilot reviewed 12 out of 12 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
tests/Aspire.Hosting.Tests/DistributedApplicationTests.cs Updates expectations for proxyless container port behavior (targetPort defaults host/public port).
tests/Aspire.Hosting.Tests/Dcp/TestKubernetesService.cs Removes fake “late allocation” path; service port allocation now aligns with targetPort defaulting.
tests/Aspire.Hosting.Tests/Dcp/DcpExecutorTests.cs Adds coverage for persistent container proxy defaults, targetPort defaulting behavior, and health check URI binding timing.
src/Aspire.Hosting/ResourceBuilderExtensions.cs Moves HTTP health check URI binding to OnBeforeResourceStarted; keeps endpoint existence check during endpoint allocation.
src/Aspire.Hosting/Dcp/DcpResourceWatcher.cs Stops publishing endpoints-allocated events on service updates; applies observed service address directly to endpoints.
src/Aspire.Hosting/Dcp/DcpModelUtilities.cs Removes dynamic proxyless allocation helpers and simplifies service->endpoint application APIs.
src/Aspire.Hosting/Dcp/DcpExecutor.cs Reorders/changes endpoint allocation publishing and defaults persistent container endpoints to proxied.
src/Aspire.Hosting/Dcp/ContainerCreator.cs Builds proxyless container port mappings using resolved EndpointAnnotation.Port (targetPort defaulted).
src/Aspire.Hosting/ApplicationModel/OnDemandEndpointAllocationAnnotation.cs Removes the on-demand endpoint allocation annotation type.
src/Aspire.Hosting/ApplicationModel/EndpointReference.cs Removes endpoint allocation “on-demand” fallback; relies on allocated endpoint snapshots directly.
src/Aspire.Hosting/ApplicationModel/EndpointAnnotation.cs Removes SpecifiedPort and relies on Port semantics (including proxyless targetPort default).

Comment thread src/Aspire.Hosting/Dcp/DcpExecutor.cs Resolved
Keep ResourceEndpointsAllocatedEvent dispatch aligned with release/13.4 so subscriber exceptions propagate and endpoint allocation callbacks complete before startup proceeds.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@danegsta

Copy link
Copy Markdown
Member Author

PR Testing Report

PR Information

CLI Version Verification

  • Expected (PR head short SHA): 4e3be3c
  • Installed CLI version: 13.4.3-pr.17960.g4e3be3c5
  • Status: ✅ Verified — version suffix matches PR head commit

Changes Analyzed

Hosting-only change to DCP endpoint allocation:

  • src/Aspire.Hosting/Dcp/{DcpExecutor,DcpModelUtilities,ContainerCreator,DcpResourceWatcher}.cs
  • src/Aspire.Hosting/ApplicationModel/{EndpointAnnotation,EndpointReference}.cs (removed OnDemandEndpointAllocationAnnotation)
  • src/Aspire.Hosting/ResourceBuilderExtensions.cs (health-check URI binding moved to BeforeResourceStartedEvent)
  • eng/Versions.props, plus DCP/distributed-app tests

Change Categories

  • Hosting integration changes
  • CLI changes
  • Dashboard changes
  • Template changes
  • Client/Component changes
  • Test changes

Test Setup

A single file-based AppHost (apphost.cs) was created from the PR hive (aspire new aspire-empty) with four traefik/whoami containers, run locally with aspire start against real Docker + DCP, then inspected with aspire describe, curl, and docker inspect.

Test Scenarios Executed

Scenario 1: Proxyless container endpoint with only a target port (happy path)

Config: AddContainer("proxyless","traefik/whoami").WithArgs("--port","8088").WithEndpoint(targetPort: 8088, scheme:"http", isProxied:false)
Expected: Allocated host/public port == target port (8088), reachable directly.
Result: ✅ Passed — aspire describe URL http://localhost:8088; Docker mapping 127.0.0.1:8088->8088/tcp; curl localhost:8088 returned a whoami response. State Running / Health Healthy.

Scenario 2: Persistent container defaults to proxied (happy path)

Config: AddContainer("persistentproxied","traefik/whoami").WithHttpEndpoint(targetPort: 80).WithLifetime(ContainerLifetime.Persistent)
Expected: Endpoint is proxied (random host port, not the target port); container starts cleanly; persistent label true.
Result: ✅ Passed — proxied URL http://localhost:64828 (random), Docker mapping ...:64864->80/tcp, label com.microsoft.developer.usvc-dev.persistent=true. State Running / Health Healthy.

Scenario 3: HTTP health check on a container endpoint — KeyVault-emulator-style timing (happy path)

Config: AddContainer("healthcheck","traefik/whoami").WithHttpEndpoint(targetPort: 80).WithHttpHealthCheck("/")
Expected: Resource reaches Healthy (health-check URI bound at BeforeResourceStartedEvent).
Result: ✅ Passed — aspire describe reported Health = Healthy; proxied endpoint reachable via curl.

Scenario 4: Persistent container with explicit proxyless opt-out (boundary)

Coverage Type: Boundary
Config: AddContainer("persistentproxyless","traefik/whoami").WithArgs("--port","8090").WithEndpoint(targetPort: 8090, scheme:"http", isProxied:false).WithLifetime(ContainerLifetime.Persistent)
Expected: Explicit isProxied:false is honored despite the new persistent→proxied default; host port == target port (8090).
Expected Boundary Outcome: Endpoint stays proxyless and uses the target port rather than being silently upgraded to a proxied endpoint.
Result: ✅ Passed — proxyless URL http://localhost:8090, Docker mapping 127.0.0.1:8090->8090/tcp, reachable via curl. persistent=true label present.

Persistence lifecycle verification (cross-cutting)

After aspire stop, the two session containers (proxyless, healthcheck) were removed, while the two persistent containers (persistentproxied, persistentproxyless) kept running — confirming the persistent lifetime is applied correctly end-to-end. The persistent containers were then cleaned up manually.

aspire describe snapshot (while running)

Name                  Type       State    Health   URLs
healthcheck           Container  Running  Healthy  http://localhost:64827
persistentproxied     Container  Running  Healthy  http://localhost:64828
persistentproxyless   Container  Running  Healthy  http://localhost:8090
proxyless             Container  Running  Healthy  http://localhost:8088

Summary

Scenario Status Notes
1. Proxyless target-port default ✅ Passed host port == 8088, reachable
2. Persistent defaults to proxied ✅ Passed random proxied port, persistent=true
3. HTTP health check timing ✅ Passed Healthy
4. Persistent + explicit proxyless ✅ Passed stays proxyless on 8090
Persistence lifecycle (stop) ✅ Passed session removed, persistent survive

Overall Result

✅ PR VERIFIED — All four scenarios plus the persistence lifecycle check behaved exactly as described in the PR. Proxyless container endpoints resolve to their target port immediately, persistent containers default to proxied while honoring an explicit proxyless opt-out, and container HTTP health checks bind and report Healthy.

Notes

  • Tested on macOS arm64 with Docker Desktop using a file-based C# AppHost and the traefik/whoami image.
  • This is an orchestration/timing change; behavior was validated against a real container runtime rather than only generated artifacts.

Use a fixed public Kafka port for the persistent reuse test and let the shared persistent-container helper disable DCP test port randomization when a test needs explicit ports to remain stable.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
"resource",
useTestContainerRegistry: true);
useTestContainerRegistry: true,
randomizePorts: false);

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Kafka specifically requires the public port to be set in an environment variable, so forcing randomized ports changes the lifecycle key between runs.

@github-actions

github-actions Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

❓ CLI E2E Tests unknown — 111 passed, 0 failed, 2 unknown (commit 1273da4)

View all recordings
- Test Detail
✅ AddPackageInteractiveWhileAppHostRunningDetached Recording · Job · CLI logs
✅ AddPackageWhileAppHostRunningDetached Recording · Job · CLI logs
✅ AgentCommands_AllHelpOutputs_AreCorrect Recording · Job · CLI logs
✅ AgentInitCommand_DefaultSelection_InstallsDefaultSkills Recording · Job · CLI logs
✅ AgentInitCommand_MigratesDeprecatedConfig Recording · Job · CLI logs
✅ AgentInitCommand_NonInteractive_BundleOnlySkillsBeyondCliCatalog_AreInstallable Recording · Job · CLI logs
✅ AgentMcpListStructuredLogsReturnsLogsFromStarterApp Recording · Job · CLI logs
✅ AgentMcpListStructuredLogsReturnsLogsFromStarterApp_DevLocalhost Recording · Job · CLI logs
✅ AgentMcpListStructuredLogsReturnsLogsFromStarterApp_Isolated Recording · Job · CLI logs
✅ AllPublishMethodsBuildDockerImages Recording · Job · CLI logs
✅ AspireAddAndStartWorkAgainstLegacyAppHostTs Recording · Job · CLI logs
✅ AspireAddPackageVersionToDirectoryPackagesProps Recording · Job · CLI logs
✅ AspireInitSingleFileAppHostRunsViaDotnetRunAppHost Recording · Job · CLI logs
✅ AspireInitWithExistingAppHostDirRecreatesMissingNuGetConfigAndPreservesFiles Recording · Job · CLI logs
❔ AspireInitWithSolutionFileGeneratesAppHostThatBuildsAgainstChannelHive Recording · Job · CLI logs
✅ AspireStartUpdatesStaleTypeScriptAppHostPath Recording · Job · CLI logs
✅ AspireUpdateRemovesAppHostPackageVersionFromDirectoryPackagesProps Recording · Job · CLI logs
✅ AspireUpdateRemovesOrphanAppHostPackageVersionWhenSdkAlreadyCurrent Recording · Job · CLI logs
✅ Banner_DisplayedOnFirstRun Recording · Job · CLI logs
✅ Banner_DisplayedWithExplicitFlag Recording · Job · CLI logs
✅ Banner_NotDisplayedWithNoLogoFlag Recording · Job · CLI logs
✅ CertificatesClean_RemovesCertificates Recording · Job · CLI logs
✅ CertificatesTrust_WithNoCert_CreatesAndTrustsCertificate Recording · Job · CLI logs
✅ CertificatesTrust_WithUntrustedCert_TrustsCertificate Recording · Job · CLI logs
✅ ConfigSetGet_CreatesNestedJsonFormat Recording · Job · CLI logs
✅ CreateAndRunAspireStarterProject Recording · Job · CLI logs
✅ CreateAndRunAspireStarterProjectWithBundle Recording · Job · CLI logs
✅ CreateAndRunEmptyAppHostProject Recording · Job · CLI logs
✅ CreateAndRunJavaEmptyAppHostProject Recording · Job · CLI logs
✅ CreateAndRunJsReactProject Recording · Job · CLI logs
✅ CreateAndRunPolyglotAppHostWithDevLocalhostUrls Recording · Job · CLI logs
✅ CreateAndRunPythonReactProject Recording · Job · CLI logs
✅ CreateAndRunTypeScriptEmptyAppHostProject Recording · Job · CLI logs
✅ CreateAndRunTypeScriptStarterProject Recording · Job · CLI logs
✅ CreateJavaAppHostWithViteApp Recording · Job · CLI logs
✅ CreateTypeScriptAppHostWithViteApp_AllowsGuestAppPackageManagerToDiffer Recording · Job · CLI logs
✅ CreateTypeScriptAppHostWithViteApp_UsesConfiguredToolchain Recording · Job · CLI logs
✅ DashboardRunWithAgentMcpListTracesReturnsNoTraces Recording · Job · CLI logs
✅ DashboardRunWithAgentMcpListTracesReturnsNoTraces_DevLocalhost Recording · Job · CLI logs
✅ DashboardRunWithOtelTracesReturnsNoTraces Recording · Job · CLI logs
✅ DashboardRunWithOtelTracesReturnsNoTraces_DevLocalhost Recording · Job · CLI logs
✅ DeployK8sBasicApiService Recording · Job · CLI logs
✅ DeployK8sWithExternalHelmChart Recording · Job · CLI logs
✅ DeployK8sWithGarnet Recording · Job · CLI logs
✅ DeployK8sWithMongoDB Recording · Job · CLI logs
✅ DeployK8sWithMySql Recording · Job · CLI logs
✅ DeployK8sWithPostgres Recording · Job · CLI logs
✅ DeployK8sWithRabbitMQ Recording · Job · CLI logs
✅ DeployK8sWithRedis Recording · Job · CLI logs
✅ DeployK8sWithSqlServer Recording · Job · CLI logs
✅ DeployK8sWithValkey Recording · Job · CLI logs
✅ DeployTypeScriptAppToKubernetes Recording · Job · CLI logs
✅ DescribeCommandResolvesReplicaNames Recording · Job · CLI logs
✅ DescribeCommandShowsRunningResources Recording · Job · CLI logs
✅ DetachFormatJsonProducesValidJson Recording · Job · CLI logs
✅ DetachFormatJsonProducesValidJsonWhenRestartingExistingInstance Recording · Job · CLI logs
✅ DoPublishAndDeployListStepsWork Recording · Job · CLI logs
✅ DocsCommand_RendersInteractiveMarkdownFromLocalSource Recording · Job · CLI logs
✅ DoctorCommand_DetectsDeprecatedAgentConfig Recording · Job · CLI logs
✅ DoctorCommand_TypeScriptAppHostReportsMissingConfiguredToolchain Recording · Job · CLI logs
✅ DoctorCommand_WithSslCertDir_ShowsTrusted Recording · Job · CLI logs
✅ DoctorCommand_WithoutSslCertDir_ShowsPartiallyTrusted Recording · Job · CLI logs
✅ GatewayWithoutExternalEndpoint_FailsPublishWithGuidance Recording · Job · CLI logs
✅ GeneratedAspireDevScript_StartsWatchMode_WithConfiguredToolchain Recording · Job · CLI logs
✅ GlobalMigration_HandlesCommentsAndTrailingCommas Recording · Job · CLI logs
✅ GlobalMigration_HandlesMalformedLegacyJson Recording · Job · CLI logs
✅ GlobalMigration_PreservesAllValueTypes Recording · Job · CLI logs
✅ GlobalMigration_SkipsWhenNewConfigExists Recording · Job · CLI logs
✅ GlobalSettings_MigratedFromLegacyFormat Recording · Job · CLI logs
✅ IngressWithoutExternalEndpoint_FailsPublishWithGuidance Recording · Job · CLI logs
✅ InitTypeScriptAppHost_AugmentsExistingViteRepoInWorkspaceSubdirectory Recording · Job · CLI logs
✅ InteractiveCSharpInitCreatesExpectedFiles Recording · Job · CLI logs
✅ InvalidAppHostPathWithComments_IsHealedOnRun Recording · Job · CLI logs
✅ JavaScriptHostingApisRunFromTypeScriptAppHost Recording · Job · CLI logs
✅ LatestCliCanStartStableChannelAppHost Recording · Job · CLI logs
✅ LatestCliCanStartStableChannelTypeScriptAppHost Recording · Job · CLI logs
✅ LegacySettingsMigration_AdjustsRelativeAppHostPath Recording · Job · CLI logs
✅ LogsCommandShowsResourceLogs Recording · Job · CLI logs
✅ OtelLogsReturnsStructuredLogsFromStarterApp Recording · Job · CLI logs
✅ OtelLogsReturnsStructuredLogsFromStarterAppIsolated Recording · Job · CLI logs
✅ PersistentContainersPreserveDataAcrossAppHostRuns Recording · Job · CLI logs
✅ PsCommandListsRunningAppHost Recording · Job · CLI logs
✅ PsFormatJsonOutputsOnlyJsonToStdout Recording · Job · CLI logs
✅ PublishJavaScriptPatternsGeneratesExpectedDockerComposeArtifacts Recording · Job · CLI logs
✅ PublishWithConfigureEnvFileUpdatesEnvOutput Recording · Job · CLI logs
✅ PublishWithDockerComposeServiceCallbackSucceeds Recording · Job · CLI logs
✅ PublishWithoutOutputPathUsesAppHostDirectoryDefault Recording · Job · CLI logs
✅ ResourceCommand_FailedExecution_DisplaysAppHostLogPathAndLogContainsEntries Recording · Job · CLI logs
✅ ResourceCommand_SetAndDeleteParameterUpdatesDescribeOutput Recording · Job · CLI logs
✅ RestoreGeneratesSdkFiles Recording · Job · CLI logs
✅ RestoreGeneratesSdkFiles_WithConfiguredToolchain Recording · Job · CLI logs
✅ RestoreRefreshesGeneratedSdkAfterAddingIntegration Recording · Job · CLI logs
✅ RestoreSupportsConfigOnlyHelperPackageAndCrossPackageTypes Recording · Job · CLI logs
✅ RunFromParentDirectory_UsesExistingConfigNearAppHost Recording · Job · CLI logs
✅ RunReportsSyntaxErrorsForDotNetAppHost Recording · Job · CLI logs
✅ RunReportsSyntaxErrorsForTypeScriptAppHost Recording · Job · CLI logs
✅ SecretCrudOnDotNetAppHost Recording · Job · CLI logs
✅ SecretCrudOnTypeScriptAppHost Recording · Job · CLI logs
✅ StagingChannel_ConfigureAndVerifySettings_ThenSwitchChannels Recording · Job · CLI logs
✅ StartAndWaitForTypeScriptSqlServerAppHostWithNativeAssets Recording · Job · CLI logs
✅ StartReportsSyntaxErrorsForDotNetAppHost Recording · Job · CLI logs
✅ StartReportsSyntaxErrorsForTypeScriptAppHost Recording · Job · CLI logs
✅ StopAllAppHostsFromAppHostDirectory Recording · Job · CLI logs
✅ StopJavaPolyglotAppHostUsingApphostDirectory Recording · Job · CLI logs
✅ StopNonInteractiveSingleAppHost Recording · Job · CLI logs
✅ StopTypeScriptPolyglotAppHostUsingApphostDirectory Recording · Job · CLI logs
✅ StopWithNoRunningAppHostExitsSuccessfully Recording · Job · CLI logs
✅ TypeScriptAppHostRunDoesNotDeadlockWhenLazyOptionsInvokeAsyncCallback Recording · Job · CLI logs
✅ UnAwaitedChainsCompileWithAutoResolvePromises Recording · Job · CLI logs
❔ UpdateProjectChannelToStable_CSharpEmptyAppHost_PreservesAspireConfigChannel Recording · Job · CLI logs
✅ UpdateProjectChannelToStable_CSharpSingleFileInit_PreservesAspireConfigChannel Recording · Job · CLI logs
✅ UpdateProjectChannelToStable_TypeScriptSingleFileInit_PreservesAspireConfigChannel Recording · Job · CLI logs
✅ UpdateProjectChannelToStable_TypeScript_PreviewsStablePackagesAndPreservesChannel Recording · Job · CLI logs

📹 Recordings uploaded automatically from CI run #27036216048

@joperezr
Jose Perez Rodriguez (joperezr) merged commit 4f21893 into release/13.4 Jun 5, 2026
618 of 621 checks passed
@joperezr
Jose Perez Rodriguez (joperezr) deleted the danegsta/persistent-container-endpoints branch June 5, 2026 21:56
@github-actions github-actions Bot added this to the 13.4.x milestone Jun 5, 2026
aspire-repo-bot Bot added a commit to microsoft/aspire.dev that referenced this pull request Jun 5, 2026
Persistent containers use proxied endpoints by default (same as session
containers), while persistent executables and projects default to proxyless
endpoints. Also document that proxyless container endpoints with only a
targetPort immediately allocate the targetPort as the host port.

Corrects docs that previously stated all persistent resources default to
proxyless endpoints.

Documents changes from microsoft/aspire#17960.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@aspire-repo-bot

Copy link
Copy Markdown
Contributor

Pull request created: #1219

Generated by PR Documentation Check

@aspire-repo-bot

Copy link
Copy Markdown
Contributor

📝 Documentation has been drafted in microsoft/aspire.dev#1219 targeting release/13.4.

Three documentation files updated to correct the persistent container endpoint proxy default, which was changed by this PR:

  • app-host/resource-lifetimes.mdx: Clarified that persistent containers use proxied endpoints by default (same as session containers), while persistent executables and projects default to proxyless. Added note about proxyless containers with only targetPort immediately allocating that port as the host port.
  • fundamentals/networking-overview.mdx: Corrected three locations (concepts list, Proxyless endpoints section, EndpointAnnotation reference) that previously stated all persistent resources default to proxyless.
  • whats-new/aspire-13-4.mdx: Corrected two locations (feature spotlight Aside and breaking-changes entry) to scope the proxyless-by-default statement to executables and projects only.

Note

This draft PR needs human review before merging.

David Pine (IEvangelist) pushed a commit to microsoft/aspire.dev that referenced this pull request Jun 8, 2026
* Fix persistent container endpoint proxy default docs

Persistent containers use proxied endpoints by default (same as session
containers), while persistent executables and projects default to proxyless
endpoints. Also document that proxyless container endpoints with only a
targetPort immediately allocate the targetPort as the host port.

Corrects docs that previously stated all persistent resources default to
proxyless endpoints.

Documents changes from microsoft/aspire#17960.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: David Negstad <50252651+danegsta@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
David Pine (IEvangelist) added a commit to microsoft/aspire.dev that referenced this pull request Jun 8, 2026
* Fix persistent container endpoint proxy default docs

Persistent containers use proxied endpoints by default (same as session
containers), while persistent executables and projects default to proxyless
endpoints. Also document that proxyless container endpoints with only a
targetPort immediately allocate the targetPort as the host port.

Corrects docs that previously stated all persistent resources default to
proxyless endpoints.

Documents changes from microsoft/aspire#17960.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: David Negstad <50252651+danegsta@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants