In LocalRunner.Run(), generateDockerCompose() is called before runSetupCommands():
|
func (d *LocalRunner) Run(ctx context.Context) error { |
|
go d.trackContainerStatusAndLogs() |
|
|
|
yamlData, err := d.generateDockerCompose() |
|
if err != nil { |
|
return fmt.Errorf("failed to generate docker-compose.yaml: %w", err) |
|
} |
|
|
|
if err := d.out.WriteFile("docker-compose.yaml", yamlData); err != nil { |
|
return fmt.Errorf("failed to write docker-compose.yaml: %w", err) |
|
} |
|
|
|
// Run setup commands before launching any services |
|
if err := d.runSetupCommands(ctx); err != nil { |
|
return err |
|
} |
generateDockerCompose calls validateImageExists for every Docker service, which fails if the image is locally-built in a setup command as the image doesn't exist yet because setup hasn't run.
Example: A recipe that builds a local image in setup and references it as a service:
setup:
- docker build -t my-service:dev .
recipe:
my-app:
services:
my-service:
image: my-service
tag: dev
Possible fix: Run setup commands before generating docker-compose, or skip validation for images that are built in setup.
In LocalRunner.Run(), generateDockerCompose() is called before runSetupCommands():
builder-playground/playground/local_runner.go
Lines 1183 to 1198 in 34c2197
generateDockerCompose calls validateImageExists for every Docker service, which fails if the image is locally-built in a setup command as the image doesn't exist yet because setup hasn't run.
Example: A recipe that builds a local image in setup and references it as a service:
Possible fix: Run setup commands before generating docker-compose, or skip validation for images that are built in setup.