Synology Plusieurs containers sur un réseau macvlan

roms

Nouveau membre
29 Novembre 2020
12
0
1
Bonjour
Je souhaiterais mettre en œuvre plusieurs containers sur mon syno avec des ip directement accessibles sur mon réseau. J ai créé un réseau macvlan. Ma question est: comment forcer à chaque container une ip spécifique de ce réseau.
J ai l impression que le container prend la première ip disponible. Je ne vois pas comment dans le webui su synology assigner l adresse ip au container.

Merci
 
Bonsoir @roms

Comment as-tu créer le réseau macvlan ? Possède-t-il suffisament d'adresses Ip potentielles ?

Si c'est le cas, tu vas pouvoir fixer les adresses IP de chaque conteneur.
Il faut cependant savoir que les conteneurs ainsi créés ne pourront pas accéder au NAS et l'inverse est également vrai. Si tu veux que les conteneurs puissent communiquer avec le NAS, il faudra créer une interface virtuelle.
Est-ce que tu as mis en place une telle interface ?

Ensuite, pour fixer une IP sur un conteneur en macvlan, je fais comme dans l'exemple ci-dessous avec mon conteneur AdGuard Home, avec un fichier docker-compose.yml (utilisé avec Portainer, ou en ligne de commande avec docker-compose up -d :

YAML:
---
version: "2.4"
services:
  adguardhome_macvlan:
    image: adguard/adguardhome:latest   # https://github.com/AdguardTeam/AdGuardHome
                                        # https://github.com/AdguardTeam/AdGuardHome/wiki/Docker
    container_name: adguardhome_macvlan
    
    hostname: AdGuard-Home--DS920Plus   # Permet d'avoir un nom pour le conteneur dans AdGuard lui même (sinon c'est une chaine aléatoire)
    
    environment:
      - PUID=1000
      - PGID=100
      - TZ=Europe/Paris
      - LANG=fr_FR.UTF8
      - LANGUAGE=fr_FR.UTF8
    
    # ---------------------------------------------------------------------------------
    # Le label ci-dessous permet à Watchtower de faire les mises à jour automatiquement
    # Cela peut-être supprimé si Watchtower n'est pas utilisé.
    labels:
      - "com.centurylinklabs.watchtower.enable=true"
    # ---------------------------------------------------------------------------------
    
    volumes:
      - "/volume1/docker/adguardhome_macvlan/work:/opt/adguardhome/work"
      - "/volume1/docker/adguardhome_macvlan/conf:/opt/adguardhome/conf"
    
    # ports:
    #   -  "953:53"
    #   -  "967:67/udp"
    #   -  "968:68"
    #   -  "8080:80/tcp"
    #   -  "9443:443/tcp"
    #   -  "9853:853/tcp"
    #   -  "3030:3000/tcp"

    networks:
      macvlan-network:
        ipv4_address: 192.168.2.210     # Mettre ici l'IP macvlan définie dans les scripts

    restart: unless-stopped

    healthcheck:
      test: "/bin/netstat -pant | /bin/grep 53"
      interval: 45s
      timeout: 30s
      retries: 3
      
networks:
  macvlan-network:        # Ce réseau devra bien entendu être créé avant avec le script
    external: true


Pour résumer, dans ton service tu dois spécifier le nom de ton réseau macvlan avec :
YAML:
    networks:
      macvlan-network:
        ipv4_address: 192.168.2.210     # Mettre ici l'IP macvlan définie dans les scripts

et à la fin du fichier, tu mets une section networks qui contient :
YAML:
networks:
  macvlan-network:        # Ce réseau devra bien entendu être créé avant avec le script
    external: true
 
  • J'adore
Réactions: EVO
Bonsoir @roms

Comment as-tu créer le réseau macvlan ? Possède-t-il suffisament d'adresses Ip potentielles ?

Si c'est le cas, tu vas pouvoir fixer les adresses IP de chaque conteneur.
Il faut cependant savoir que les conteneurs ainsi créés ne pourront pas accéder au NAS et l'inverse est également vrai. Si tu veux que les conteneurs puissent communiquer avec le NAS, il faudra créer une interface virtuelle.
Est-ce que tu as mis en place une telle interface ?

Ensuite, pour fixer une IP sur un conteneur en macvlan, je fais comme dans l'exemple ci-dessous avec mon conteneur AdGuard Home, avec un fichier docker-compose.yml (utilisé avec Portainer, ou en ligne de commande avec docker-compose up -d :

YAML:
---
version: "2.4"
services:
  adguardhome_macvlan:
    image: adguard/adguardhome:latest   # https://github.com/AdguardTeam/AdGuardHome
                                        # https://github.com/AdguardTeam/AdGuardHome/wiki/Docker
    container_name: adguardhome_macvlan
   
    hostname: AdGuard-Home--DS920Plus   # Permet d'avoir un nom pour le conteneur dans AdGuard lui même (sinon c'est une chaine aléatoire)
   
    environment:
      - PUID=1000
      - PGID=100
      - TZ=Europe/Paris
      - LANG=fr_FR.UTF8
      - LANGUAGE=fr_FR.UTF8
   
    # ---------------------------------------------------------------------------------
    # Le label ci-dessous permet à Watchtower de faire les mises à jour automatiquement
    # Cela peut-être supprimé si Watchtower n'est pas utilisé.
    labels:
      - "com.centurylinklabs.watchtower.enable=true"
    # ---------------------------------------------------------------------------------
   
    volumes:
      - "/volume1/docker/adguardhome_macvlan/work:/opt/adguardhome/work"
      - "/volume1/docker/adguardhome_macvlan/conf:/opt/adguardhome/conf"
   
    # ports:
    #   -  "953:53"
    #   -  "967:67/udp"
    #   -  "968:68"
    #   -  "8080:80/tcp"
    #   -  "9443:443/tcp"
    #   -  "9853:853/tcp"
    #   -  "3030:3000/tcp"

    networks:
      macvlan-network:
        ipv4_address: 192.168.2.210     # Mettre ici l'IP macvlan définie dans les scripts

    restart: unless-stopped

    healthcheck:
      test: "/bin/netstat -pant | /bin/grep 53"
      interval: 45s
      timeout: 30s
      retries: 3
     
networks:
  macvlan-network:        # Ce réseau devra bien entendu être créé avant avec le script
    external: true


Pour résumer, dans ton service tu dois spécifier le nom de ton réseau macvlan avec :
YAML:
    networks:
      macvlan-network:
        ipv4_address: 192.168.2.210     # Mettre ici l'IP macvlan définie dans les scripts

et à la fin du fichier, tu mets une section networks qui contient :
YAML:
networks:
  macvlan-network:        # Ce réseau devra bien entendu être créé avant avec le script
    external: true
Hello
Ok merci. J'ai créé le macvlzn en ligne de commande et j ai mis un /28 pour avoir qq adresses dispo dans ce scope.
Mais en fait pour assigner une ip il faut donc nécessairement utiliser un fichier docker-compose si je comprends bien?

En fait j ai un adguard déjà sur ce réseau, mais il a pris la première ip du score. ce qui pour le moment ne me gênait pas. mais je voudrais mettre en place un NPM et forcer l ip du npm.
 
Hello
Ok merci. J'ai créé le macvlzn en ligne de commande et j ai mis un /28 pour avoir qq adresses dispo dans ce scope.
Mais en fait pour assigner une ip il faut donc nécessairement utiliser un fichier docker-compose si je comprends bien?

En fait j ai un adguard déjà sur ce réseau, mais il a pris la première ip du score. ce qui pour le moment ne me gênait pas. mais je voudrais mettre en place un NPM et forcer l ip du npm.
En dehors d'un docker-compose (ou Portainer), je ne sais pas comment fixer une adresse IP à un conteneur...