Specify service label in docker-compose file

Viewed 14696

When labeling a service in the docker-compose file only the created container is labeled and not the service itself.

I would like to add a label to a service created using a docker-compose file. When adding the label under the labels property, the label is only added to the corresponding container and not to the service itself.

In the documentation of the docker service create command there are two different options for labels:

  • --container-label: specify container label
  • --label: specify service label

I'm wondering why the label property in the docker-compose file only corresponds to the first option.

version: "3.7"

services:
  zalenium:
    image: zalenium:latest
    hostname: zalenium
    deploy:
      placement:
        constraints:
            - node.role == manager
    labels:
        - "de.zalando.gridRole=hub"
    ports:
        - "4444:4444"
    networks:
        - zalenium
    environment:
        - PULL_SELENIUM_IMAGE=true
        - ZALENIUM_PROXY_CLEANUP_TIMEOUT=1800
    command: ["start", "--swarmOverlayNetwork", "tau_zalenium", "--videoRecordingEnabled", "false"]

networks:
    zalenium:
        driver: overlay
        attachable: true

Actual result: Only the created container has the label "de.zalando.gridRole"

Expected result: The service should have the label "de.zalando.gridRole"

1 Answers

According to the docker-compose reference, you need to specify the service labels like this:

version: "3.7"
services:
  web:
    image: web
    deploy:
      labels:
        com.example.description: "This label will appear on the web service"

Add a deploy section and mention your labels there.

As with docker, here as well these labels are taken into account when deploying on a docker swarm. Otherwise they are ignored.

Related