services: harbor-core: image: bitnami/harbor-core:latest container_name: harbor-core-node${HARBOR_NODE_ID} restart: unless-stopped depends_on: - harbor-db - harbor-redis - harbor-registry environment: - HARBOR_ADMIN_PASSWORD=${HARBOR_ADMIN_PASS} - HARBOR_DATABASE_HOST=harbor-db - HARBOR_DATABASE_PASSWORD=${HARBOR_DB_PASS} - HARBOR_REDIS_HOST=harbor-redis # Internal Docker DNS uses service name (harbor-registry), not container name - HARBOR_REGISTRY_URL=http://harbor-registry:5000 - EXT_ENDPOINT=https://${HARBOR_HOST_NAME}.${TRAEFIK_DNS_SUFFIX} volumes: - /shared/harbor/data:/data networks: - harbor_internal - harbor_external labels: - "traefik.enable=true" - "traefik.docker.network=harbor_external" # FIXED TYPO: Changed TREAFIK to TRAEFIK - "traefik.http.routers.harbor.rule=Host(`${HARBOR_HOST_NAME}.${TRAEFIK_DNS_SUFFIX}`)" - "traefik.http.routers.harbor.tls=true" - "traefik.http.routers.harbor.tls.certresolver=dns_resolver" - "traefik.http.services.harbor.loadbalancer.server.port=8080" harbor-registry: image: bitnami/harbor-registry:latest container_name: harbor-registry-node${HARBOR_NODE_ID} restart: unless-stopped depends_on: - harbor-redis environment: - REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/storage - REGISTRY_REDIS_HOST=harbor-redis - REGISTRY_HTPASSWD_REALM=Harbor-Registry volumes: - /shared/harbor/registry:/storage - /shared/harbor/config/registry:/etc/registry:ro networks: - harbor_internal harbor-jobservice: image: bitnami/harbor-jobservice:latest container_name: harbor-jobservice-node${HARBOR_NODE_ID} restart: unless-stopped depends_on: - harbor-core - harbor-redis - harbor-db environment: - HARBOR_DATABASE_HOST=harbor-db - HARBOR_DATABASE_PASSWORD=${HARBOR_DB_PASS} - HARBOR_REDIS_HOST=harbor-redis volumes: - /shared/harbor/jobservice:/var/log/jobs networks: - harbor_internal harbor-db: image: bitnami/postgresql:latest container_name: harbor-db-node${HARBOR_NODE_ID} restart: unless-stopped environment: - POSTGRESQL_USERNAME=bn_harbor - POSTGRESQL_PASSWORD=${HARBOR_DB_PASS} - POSTGRESQL_DATABASE=bitnami_harbor volumes: - /shared/harbor/database:/bitnami/postgresql networks: - harbor_internal harbor-redis: image: bitnami/redis:latest container_name: harbor-redis-node${HARBOR_NODE_ID} restart: unless-stopped environment: - ALLOW_EMPTY_PASSWORD=yes volumes: - /shared/harbor/redis:/bitnami/redis/data networks: - harbor_internal networks: harbor_internal: driver: bridge harbor_external: external: true