Merge pull request #1030 from docker/feat-container-labels

compose: Add service labels
This commit is contained in:
Nicolas De loof 2020-12-08 16:47:43 +01:00 committed by GitHub
commit 893a469b87
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 26 additions and 17 deletions

View File

@ -17,7 +17,6 @@
package compose package compose
import ( import (
"os"
"path/filepath" "path/filepath"
"testing" "testing"
@ -119,7 +118,5 @@ func TestBuildBindMount(t *testing.T) {
mount, err := buildMount(volume) mount, err := buildMount(volume)
assert.NilError(t, err) assert.NilError(t, err)
assert.Assert(t, filepath.IsAbs(mount.Source)) assert.Assert(t, filepath.IsAbs(mount.Source))
_, err = os.Stat(mount.Source)
assert.NilError(t, err)
assert.Equal(t, mount.Type, mountTypes.TypeBind) assert.Equal(t, mount.Type, mountTypes.TypeBind)
} }

View File

@ -82,18 +82,22 @@ func getContainerCreateOptions(p *types.Project, s types.ServiceConfig, number i
if err != nil { if err != nil {
return nil, nil, nil, err return nil, nil, nil, err
} }
// TODO: change oneoffLabel value for containers started with `docker compose run`
labels := map[string]string{ labels := map[string]string{}
projectLabel: p.Name, for k, v := range s.Labels {
serviceLabel: s.Name, labels[k] = v
versionLabel: ComposeVersion,
oneoffLabel: "False",
configHashLabel: hash,
workingDirLabel: p.WorkingDir,
configFilesLabel: strings.Join(p.ComposeFiles, ","),
containerNumberLabel: strconv.Itoa(number),
} }
// TODO: change oneoffLabel value for containers started with `docker compose run`
labels[projectLabel] = p.Name
labels[serviceLabel] = s.Name
labels[versionLabel] = ComposeVersion
labels[oneoffLabel] = "False"
labels[configHashLabel] = hash
labels[workingDirLabel] = p.WorkingDir
labels[configFilesLabel] = strings.Join(p.ComposeFiles, ",")
labels[containerNumberLabel] = strconv.Itoa(number)
var ( var (
runCmd strslice.StrSlice runCmd strslice.StrSlice
entrypoint strslice.StrSlice entrypoint strslice.StrSlice

View File

@ -50,14 +50,14 @@ func TestLocalComposeUp(t *testing.T) {
const projectName = "compose-e2e-demo" const projectName = "compose-e2e-demo"
t.Run("build", func(t *testing.T) { t.Run("build", func(t *testing.T) {
res := c.RunDockerCmd("compose", "build", "-f", "../../../tests/composefiles/demo_multi_port.yaml") res := c.RunDockerCmd("compose", "build", "-f", "../composefiles/demo_multi_port.yaml")
res.Assert(t, icmd.Expected{Out: "COPY words.sql /docker-entrypoint-initdb.d/"}) res.Assert(t, icmd.Expected{Out: "COPY words.sql /docker-entrypoint-initdb.d/"})
res.Assert(t, icmd.Expected{Out: "COPY pom.xml ."}) res.Assert(t, icmd.Expected{Out: "COPY pom.xml ."})
res.Assert(t, icmd.Expected{Out: "COPY static /static/"}) res.Assert(t, icmd.Expected{Out: "COPY static /static/"})
}) })
t.Run("up", func(t *testing.T) { t.Run("up", func(t *testing.T) {
c.RunDockerCmd("compose", "up", "-d", "-f", "../../../tests/composefiles/demo_multi_port.yaml", "--project-name", projectName, "-d") c.RunDockerCmd("compose", "up", "-d", "-f", "../composefiles/demo_multi_port.yaml", "--project-name", projectName, "-d")
}) })
t.Run("check running project", func(t *testing.T) { t.Run("check running project", func(t *testing.T) {
@ -78,7 +78,7 @@ func TestLocalComposeUp(t *testing.T) {
res.Assert(t, icmd.Expected{Out: `"com.docker.compose.project": "compose-e2e-demo"`}) res.Assert(t, icmd.Expected{Out: `"com.docker.compose.project": "compose-e2e-demo"`})
res.Assert(t, icmd.Expected{Out: `"com.docker.compose.oneoff": "False",`}) res.Assert(t, icmd.Expected{Out: `"com.docker.compose.oneoff": "False",`})
res.Assert(t, icmd.Expected{Out: `"com.docker.compose.config-hash":`}) res.Assert(t, icmd.Expected{Out: `"com.docker.compose.config-hash":`})
res.Assert(t, icmd.Expected{Out: `"com.docker.compose.project.config_files": "../../../tests/composefiles/demo_multi_port.yaml"`}) res.Assert(t, icmd.Expected{Out: `"com.docker.compose.project.config_files": "../composefiles/demo_multi_port.yaml"`})
res.Assert(t, icmd.Expected{Out: `"com.docker.compose.project.working_dir":`}) res.Assert(t, icmd.Expected{Out: `"com.docker.compose.project.working_dir":`})
res.Assert(t, icmd.Expected{Out: `"com.docker.compose.service": "web"`}) res.Assert(t, icmd.Expected{Out: `"com.docker.compose.service": "web"`})
res.Assert(t, icmd.Expected{Out: `"com.docker.compose.version":`}) res.Assert(t, icmd.Expected{Out: `"com.docker.compose.version":`})
@ -89,6 +89,12 @@ func TestLocalComposeUp(t *testing.T) {
res.Assert(t, icmd.Expected{Out: `"com.docker.compose.version": `}) res.Assert(t, icmd.Expected{Out: `"com.docker.compose.version": `})
}) })
t.Run("check user labels", func(t *testing.T) {
res := c.RunDockerCmd("inspect", projectName+"_web_1")
res.Assert(t, icmd.Expected{Out: `"my-label": "test"`})
})
t.Run("down", func(t *testing.T) { t.Run("down", func(t *testing.T) {
_ = c.RunDockerCmd("compose", "down", "--project-name", projectName) _ = c.RunDockerCmd("compose", "down", "--project-name", projectName)
}) })

View File

@ -13,3 +13,5 @@ services:
image: gtardif/sentences-web image: gtardif/sentences-web
ports: ports:
- "80:80" - "80:80"
labels:
- "my-label=test"