func TestNewFromDocker(t *testing.T) { cfg, err := config.NewFromFile("config/testdata/compose.yml", containerTestVars, map[string]interface{}{}, false) if err != nil { t.Fatal(err) } container := NewContainerFromConfig(config.NewContainerName("myapp", "main"), cfg.Containers["main"]) opts, err := container.CreateContainerOptions() if err != nil { t.Fatal(err) } apiContainer := &docker.Container{ Config: &docker.Config{ Labels: opts.Config.Labels, }, State: docker.State{ Running: true, }, Name: "/myapp.main", } configFromAPI, err := config.NewFromDocker(apiContainer) if err != nil { t.Fatal(err) } compareResult := cfg.Containers["main"].IsEqualTo(configFromAPI) assert.True(t, compareResult, "container spec converted from API should be equal to one fetched from config file, failed on field: %s", cfg.Containers["main"].LastCompareField()) }
// NewContainerFromDocker converts a container object given by // docker client to a local Container object func NewContainerFromDocker(dockerContainer *docker.Container) (*Container, error) { cfg, err := config.NewFromDocker(dockerContainer) if err != nil { if _, ok := err.(config.ErrNotRockerCompose); !ok { return nil, err } } return &Container{ ID: dockerContainer.ID, Image: imagename.New(dockerContainer.Config.Image), ImageID: dockerContainer.Image, Name: config.NewContainerNameFromString(dockerContainer.Name), Created: dockerContainer.Created, State: &ContainerState{ Running: dockerContainer.State.Running, Paused: dockerContainer.State.Paused, Restarting: dockerContainer.State.Restarting, OOMKilled: dockerContainer.State.OOMKilled, Pid: dockerContainer.State.Pid, ExitCode: dockerContainer.State.ExitCode, Error: dockerContainer.State.Error, StartedAt: dockerContainer.State.StartedAt, FinishedAt: dockerContainer.State.FinishedAt, }, Config: cfg, container: dockerContainer, }, nil }