This commit is contained in:
Groysman881 2026-01-17 11:09:46 -06:00 committed by GitHub
commit 5fac94a771
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 40 additions and 5 deletions

View file

@ -18,6 +18,7 @@ import (
ctxstore "github.com/docker/cli/cli/context/store" ctxstore "github.com/docker/cli/cli/context/store"
"github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/container"
"github.com/docker/docker/client" "github.com/docker/docker/client"
"github.com/goccy/go-yaml"
"github.com/imdario/mergo" "github.com/imdario/mergo"
"github.com/jesseduffield/lazydocker/pkg/commands/ssh" "github.com/jesseduffield/lazydocker/pkg/commands/ssh"
"github.com/jesseduffield/lazydocker/pkg/config" "github.com/jesseduffield/lazydocker/pkg/config"
@ -39,6 +40,7 @@ type DockerCommand struct {
Config *config.AppConfig Config *config.AppConfig
Client *client.Client Client *client.Client
InDockerComposeProject bool InDockerComposeProject bool
ProjectName string
ErrorChan chan error ErrorChan chan error
ContainerMutex deadlock.Mutex ContainerMutex deadlock.Mutex
ServiceMutex deadlock.Mutex ServiceMutex deadlock.Mutex
@ -138,6 +140,17 @@ func NewDockerCommand(log *logrus.Entry, osCommand *OSCommand, tr *i18n.Translat
if err != nil { if err != nil {
dockerCommand.InDockerComposeProject = false dockerCommand.InDockerComposeProject = false
log.Warn(err.Error()) log.Warn(err.Error())
} else {
composeCommand := config.UserConfig.CommandTemplates.DockerCompose
yamlDockerComposeConfig, err := osCommand.RunCommandWithOutput(fmt.Sprintf("%s config --format=yaml", composeCommand))
if err == nil {
dockerCommand.ProjectName, err = determineProjectName(yamlDockerComposeConfig)
}
if err != nil {
log.Warn(err.Error())
}
} }
return dockerCommand, nil return dockerCommand, nil
@ -222,7 +235,7 @@ func (c *DockerCommand) assignContainersToServices(containers []*Container, serv
L: L:
for _, service := range services { for _, service := range services {
for _, ctr := range containers { for _, ctr := range containers {
if !ctr.OneOff && ctr.ServiceName == service.Name { if !ctr.OneOff && ctr.ServiceName == service.Name && (c.ProjectName == "" || ctr.ProjectName == c.ProjectName) {
service.Container = ctr service.Container = ctr
continue L continue L
} }
@ -378,6 +391,24 @@ func (c *DockerCommand) DockerComposeConfig() string {
return output return output
} }
// determineProjectName tries to the determine the docker compose project name
func determineProjectName(yamlDockerComposeConfig string) (string, error) {
var projectName string
var config map[string]any
err := yaml.Unmarshal([]byte(yamlDockerComposeConfig), &config)
if err != nil {
return projectName, err
}
projectName, ok := config["name"].(string)
if !ok {
return projectName, fmt.Errorf("Incorrect value of docker compose project name in config: %s", config["name"])
}
return projectName, nil
}
// determineDockerHost tries to the determine the docker host that we should connect to // determineDockerHost tries to the determine the docker host that we should connect to
// in the following order of decreasing precedence: // in the following order of decreasing precedence:
// - value of "DOCKER_HOST" environment variable // - value of "DOCKER_HOST" environment variable

View file

@ -80,6 +80,9 @@ func (gui *Gui) refreshProject() error {
func (gui *Gui) getProjectName() string { func (gui *Gui) getProjectName() string {
projectName := path.Base(gui.Config.ProjectDir) projectName := path.Base(gui.Config.ProjectDir)
if gui.DockerCommand.InDockerComposeProject { if gui.DockerCommand.InDockerComposeProject {
if gui.DockerCommand.ProjectName != "" {
return gui.DockerCommand.ProjectName
} else {
for _, service := range gui.Panels.Services.List.GetAllItems() { for _, service := range gui.Panels.Services.List.GetAllItems() {
container := service.Container container := service.Container
if container != nil && container.DetailsLoaded() { if container != nil && container.DetailsLoaded() {
@ -87,6 +90,7 @@ func (gui *Gui) getProjectName() string {
} }
} }
} }
}
return projectName return projectName
} }