diff --git a/internal/runtime/docker.go b/internal/runtime/docker.go index dddb9af..f00c0ca 100644 --- a/internal/runtime/docker.go +++ b/internal/runtime/docker.go @@ -107,10 +107,12 @@ func (d *DockerRuntime) PullImage(ctx context.Context, imageName string, progres return nil } +const emulatorContainerPort = nat.Port("4566/tcp") + func (d *DockerRuntime) Start(ctx context.Context, config ContainerConfig) (string, error) { - port := nat.Port(config.Port + "/tcp") - exposedPorts := nat.PortSet{port: struct{}{}} - portBindings := nat.PortMap{port: []nat.PortBinding{{HostPort: config.Port}}} + containerPort := emulatorContainerPort + exposedPorts := nat.PortSet{containerPort: struct{}{}} + portBindings := nat.PortMap{containerPort: []nat.PortBinding{{HostPort: config.Port}}} resp, err := d.client.ContainerCreate(ctx, &container.Config{ diff --git a/test/integration/start_test.go b/test/integration/start_test.go index 2bf88f6..ec8246a 100644 --- a/test/integration/start_test.go +++ b/test/integration/start_test.go @@ -3,6 +3,8 @@ package integration_test import ( "context" "net" + "os" + "path/filepath" "testing" "github.com/docker/docker/api/types/container" @@ -95,6 +97,30 @@ func TestStartCommandFailsWhenPortInUse(t *testing.T) { assert.Contains(t, stdout, "lstk stop") } +func TestStartCommandSucceedsWithNonDefaultPort(t *testing.T) { + requireDocker(t) + _ = env.Require(t, env.AuthToken) + + cleanup() + t.Cleanup(cleanup) + + mockServer := createMockLicenseServer(true) + defer mockServer.Close() + + configContent := ` +[[containers]] +type = "aws" +tag = "latest" +port = "4567" +` + configFile := filepath.Join(t.TempDir(), "config.toml") + require.NoError(t, os.WriteFile(configFile, []byte(configContent), 0644)) + + ctx := testContext(t) + _, stderr, err := runLstk(t, ctx, "", env.With(env.APIEndpoint, mockServer.URL), "--config", configFile, "start") + require.NoError(t, err, "lstk start failed: %s", stderr) +} + func cleanup() { ctx := context.Background() _ = dockerClient.ContainerStop(ctx, containerName, container.StopOptions{})