Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 9 additions & 4 deletions internal/container/start.go
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ func Start(ctx context.Context, rt runtime.Runtime, sink output.Sink, opts Start
}
}

containers, err = selectContainersToStart(ctx, rt, sink, tel, containers)
containers, err = selectContainersToStart(ctx, rt, sink, tel, containers, opts.LocalStackHost, opts.WebAppURL)
if err != nil {
return err
}
Expand Down Expand Up @@ -226,7 +226,7 @@ func runPostStartSetups(ctx context.Context, sink output.Sink, containers []conf
if setup, ok := setups[t]; ok {
resolvedHost, dnsOK := endpoint.ResolveHost(firstByType[t].Port, localStackHost)
if !dnsOK {
output.EmitNote(sink, `Could not resolve "localhost.localstack.cloud" — your system may have DNS rebind protection enabled. Using 127.0.0.1 as the endpoint.`)
output.EmitNote(sink, endpoint.DNSRebindNote)
}
if err := setup(ctx, sink, interactive, resolvedHost); err != nil {
return err
Expand Down Expand Up @@ -352,15 +352,20 @@ func startContainers(ctx context.Context, rt runtime.Runtime, sink output.Sink,
return nil
}

func selectContainersToStart(ctx context.Context, rt runtime.Runtime, sink output.Sink, tel *telemetry.Client, containers []runtime.ContainerConfig) ([]runtime.ContainerConfig, error) {
func selectContainersToStart(ctx context.Context, rt runtime.Runtime, sink output.Sink, tel *telemetry.Client, containers []runtime.ContainerConfig, localStackHost, webAppURL string) ([]runtime.ContainerConfig, error) {
var filtered []runtime.ContainerConfig
for _, c := range containers {
running, err := rt.IsRunning(ctx, c.Name)
if err != nil && !errdefs.IsNotFound(err) {
return nil, fmt.Errorf("failed to check container status: %w", err)
}
if running {
output.EmitInfo(sink, "LocalStack is already running")
output.EmitNote(sink, "LocalStack is already running")
resolvedHost, dnsOK := endpoint.ResolveHost(c.Port, localStackHost)
if !dnsOK {
output.EmitNote(sink, endpoint.DNSRebindNote)
}
emitPostStartPointers(sink, resolvedHost, webAppURL)
continue
}
if err := ports.CheckAvailable(c.Port); err != nil {
Expand Down
2 changes: 2 additions & 0 deletions internal/endpoint/endpoint.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import "net"

const Hostname = "localhost.localstack.cloud"

const DNSRebindNote = "Could not resolve localhost.localstack.cloud, falling back to 127.0.0.1."

// ResolveHost returns the best host:port for reaching LocalStack on the given port.
// If override is non-empty it is returned as-is. Otherwise a DNS check is performed;
// if Hostname does not resolve to 127.0.0.1 (e.g. DNS rebind protection is active),
Expand Down
2 changes: 1 addition & 1 deletion internal/ui/run_awsconfig.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ func RunConfigProfile(parentCtx context.Context, containers []config.ContainerCo

return runWithTUI(parentCtx, withoutHeader(), func(ctx context.Context, sink output.Sink) error {
if !dnsOK {
output.EmitNote(sink, `Could not resolve "localhost.localstack.cloud" - your system may have DNS rebind protection enabled. Using 127.0.0.1 as the endpoint.`)
output.EmitNote(sink, endpoint.DNSRebindNote)
}
status, err := awsconfig.CheckProfileStatus(resolvedHost)
if err != nil {
Expand Down