Traefik内のサービス名を変更する

Traefikのダッシュボードを見ていて気がつくのは、サービス名に一貫性の無いことだ。まるで「どういう理由でこの名前になったのか」がわからない。

以下はNextCloudの例だが、必ずしもこういうパターンとは限らない。

この理由は全くわからないのだが、サービス名を強制する方法は、How to set Traefik 2.4 service name in docker-compose labelsにあった。

labels:
  - traefik.http.services.<<name_of_service>>.loadbalancer.server.port=80

を入れろというのだ。

たしかに、以下のようにloadbalancerを入れてやると、サービス名がその名前に変更される(この場合は、指定する必要の無い80を明示的に指定している)。

version: '3'

services:
  nextcloud:
    image: nextcloud:24.0.5
    container_name: nextcloud
    volumes:
      - ./data:/var/www/html
    environment:
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=***
      - MYSQL_PASSWORD=***
      - MYSQL_HOST=mariadb
      - PHP_UPLOAD_MAX_FILESIZE=1024M
      - PHP_POST_MAX_SIZE=1024M
      - PHP_UPLOAD_LIMIT=16G
# port 3000
    restart: always
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.nextcloud.rule=Host(`nc.****.com`)"
      - "traefik.http.services.nextcloud.loadbalancer.server.port=80" # これ
      - "traefik.http.routers.nextcloud.entrypoints=websecure"
      - "traefik.http.routers.nextcloud.tls.certresolver=myresolver"
      - "traefik.http.routers.nextcloud-http.entrypoints=web"
      - "traefik.http.routers.nextcloud-http.rule=Host(`nc.****.com`)"
      - "traefik.http.routers.nextcloud-http.middlewares=nextcloud-https"
      - "traefik.http.middlewares.nextcloud-https.redirectscheme.scheme=https"
networks:
  default:
    external:
      name: traefik-network

このように変更される。