|
8 | 8 | "os" |
9 | 9 | stdruntime "runtime" |
10 | 10 | "slices" |
| 11 | + "strconv" |
11 | 12 | "strings" |
12 | 13 | "time" |
13 | 14 |
|
@@ -82,16 +83,31 @@ func Start(ctx context.Context, rt runtime.Runtime, sink output.Sink, opts Start |
82 | 83 | if err != nil { |
83 | 84 | return err |
84 | 85 | } |
85 | | - env := append(resolvedEnv, "LOCALSTACK_AUTH_TOKEN="+token) |
| 86 | + |
| 87 | + containerName := c.Name() |
| 88 | + env := append(resolvedEnv, |
| 89 | + "LOCALSTACK_AUTH_TOKEN="+token, |
| 90 | + "GATEWAY_LISTEN=:4566", |
| 91 | + "MAIN_CONTAINER_NAME="+containerName, |
| 92 | + ) |
| 93 | + |
| 94 | + var binds []runtime.BindMount |
| 95 | + if socketPath := rt.SocketPath(); socketPath != "" { |
| 96 | + binds = append(binds, runtime.BindMount{HostPath: socketPath, ContainerPath: "/var/run/docker.sock"}) |
| 97 | + env = append(env, "DOCKER_HOST=unix:///var/run/docker.sock") |
| 98 | + } |
| 99 | + |
86 | 100 | containers[i] = runtime.ContainerConfig{ |
87 | 101 | Image: image, |
88 | | - Name: c.Name(), |
| 102 | + Name: containerName, |
89 | 103 | Port: c.Port, |
90 | 104 | ContainerPort: containerPort, |
91 | 105 | HealthPath: healthPath, |
92 | 106 | Env: env, |
93 | 107 | Tag: c.Tag, |
94 | 108 | ProductName: productName, |
| 109 | + Binds: binds, |
| 110 | + ExtraPorts: servicePortRange(), |
95 | 111 | } |
96 | 112 | } |
97 | 113 |
|
@@ -341,3 +357,14 @@ func hasDuplicateContainerTypes(containers []config.ContainerConfig) bool { |
341 | 357 | } |
342 | 358 | return false |
343 | 359 | } |
| 360 | + |
| 361 | +func servicePortRange() []runtime.PortMapping { |
| 362 | + const start = 4510 |
| 363 | + const end = 4559 |
| 364 | + var ports []runtime.PortMapping |
| 365 | + for p := start; p <= end; p++ { |
| 366 | + ps := strconv.Itoa(p) |
| 367 | + ports = append(ports, runtime.PortMapping{ContainerPort: ps, HostPort: ps}) |
| 368 | + } |
| 369 | + return ports |
| 370 | +} |
0 commit comments