ubuntuusers.de

Docker-Anwendung eigene IP verpassen?

Status: Ungelöst | Ubuntu-Version: Server 24.04 (Noble Numbat)
Antworten |

Reihner

Anmeldungsdatum:
14. Juni 2017

Beiträge: 159

Wohnort: Klendathu

Hallo ihr, und auch du da in der Ecke,

Ich habe eine Frage zu Docker-Anwedungen an sich, also wo mehrere einzelne Container zusammen geschaltete sind. Ich bin mir ziemlich sicher das dies schon mal diskutiert/erklärt/gefragt wurde. Leider finde ich es nicht oder ich habe einen Denkfehler.

  • Wie kann ich der ganzen Anwendung eine Eigene IP verpassen ohne die interne IP-Struktur zu zu beschädigen?

So sieht die Anwendung aus ...

networks:
  internal:
    name: internal
    external: false

services:
  redis:
    container_name: immich_redis
    image: redis:7-alpine
    restart: unless-stopped
    networks:
      - internal
    healthcheck:
      test: redis-cli ping || exit 1

  db:
    container_name: immich_db
    image: tensorchord/pgvecto-rs:pg16-v0.3.0
    restart: unless-stopped
    networks:
      - internal
    volumes:
      - /share/Container/immich/pgdata:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: immich
      POSTGRES_USER: immich
      POSTGRES_PASSWORD: 123456
      POSTGRES_INITDB_ARGS: '--data-checksums'
    healthcheck:
      test: pg_isready --dbname='immich' --username='immich' || exit 1; Chksum="$$(psql --dbname='immich' --username='immich' --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ "$$Chksum" = '0' ] || exit 1
      interval: 5m
      start_interval: 30s
      start_period: 5m
    command:
      [
        'postgres',
        '-c',
        'shared_preload_libraries=vectors.so',
        '-c',
        'search_path="$$user", public, vectors',
        '-c',
        'logging_collector=on',
        '-c',
        'max_wal_size=2GB',
        '-c',
        'shared_buffers=512MB',
        '-c',
        'wal_compression=on',
      ]

  db_backup:
    container_name: immich_db_backup
    image: prodrigestivill/postgres-backup-local:16
    restart: unless-stopped
    environment:
      POSTGRES_HOST: db
      POSTGRES_CLUSTER: 'TRUE'
      POSTGRES_USER: immich
      POSTGRES_PASSWORD: 123456
      POSTGRES_DB: immich
      SCHEDULE: "@daily"
      POSTGRES_EXTRA_OPTS: '--clean --if-exists'
      TZ: Europe/Berlin
    volumes:
      - /share/Container/immich/pgdata-backup:/backups
    depends_on:
      - db
    networks:
      - internal

  immich:
    container_name: immich
    image: ghcr.io/immich-app/immich-server:release
    restart: unless-stopped
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities:
                - gpu
                - compute
                - video
    depends_on:
      - db
      - redis
    networks:
      - internal
      
    ports:
      - 2283:2283
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /share/Container/immich/library:/usr/src/app/upload
      - /share/internes NAS/Eigene Bilder:/mnt/bilder
    environment:
      DB_HOSTNAME: db
      DB_USERNAME: immich
      DB_DATABASE_NAME: immich
      DB_PASSWORD: 123456
      TZ: Europe/Berlin
    healthcheck:
      disable: false

  immich-machine-learning:
    container_name: immich-machine-learning
    image: ghcr.io/immich-app/immich-machine-learning:release
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities:
                - gpu
    restart: unless-stopped
    depends_on:
      - db
      - redis
    networks:
      - internal
    volumes:
      - /share/Container/immich/model-cache:/cache
    environment:
      DB_HOSTNAME: db
      DB_USERNAME: immich
      DB_DATABASE_NAME: immich
      DB_PASSWORD: 123456
      TZ: Europe/Berlin
    healthcheck:
      disable: false

... und die will ich über eine eigene IP, nicht die IP des Servers wo Docker läuft, erreichen können .. oder zumindest den immich-Server an sich.

BillMaier Team-Icon

Supporter

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6494

Mir wäre nicht bekannt, dass es so etwas für Docker gibt. Für Kubernetes gibt es dafür die Services mit loadBalancerIP , aber auch die brauchen dann einen separaten LoadBalancer (außerhalb oder innerhalb des Clusters), der sich dann um das Routing kümmert.

Darf ich fragen, was du genau damit vor hast?

Wenn es dir nur darum geht, mehrere http(s)-Endpoints an einer Adresse zu betreiben, dann wäre ein ReverseProxy wie traefik eine gute Wahl: https://doc.traefik.io/traefik/routing/providers/docker/

Die IP ist dann aber immer noch die des Hosts.

Wenn du zusätzliche IPs auf Hosts haben willst, kannst du dir keepalived anschauen. Das wäre aber eher was bei mehreren Nodes. Für „eine IP pro Docker Service“ ist das nicht geeignet, weil das außerhalb der Docker Services gepflegt werden muss und damit sehr umständlich wird und nicht skaliert. Außerdem liegt da einfach nur eine weitere IP an deinem Host an. Ist glaub nicht dein Anwendungsfall.

Viele Grüße

BillMaier

encbladexp Team-Icon

Ehemaliger
Avatar von encbladexp

Anmeldungsdatum:
16. Februar 2007

Beiträge: 17519

---
service:
  bla:
    ports:
      - "1.2.3.4:1234:1234"

Ist was du suchst, dem Host gibst du dann halt noch 1.2.3.4 als weitere IP, schon lauscht der Dienst nur auf dieser einen IP. Geht auch mit anderen Interfaces die der Host kennt, so langer er das Interface und diese IP (auch) hat.

BillMaier Team-Icon

Supporter

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6494

Wieder was gelernt

Antworten |