Assistance sur ESXi VM Debian 11 avec Docker et Portainer

Bonjour,

Bon dans ma quête à l’infrastructure pour ma domotique, je me suis mis à tenter de voir ce que Docker donne.
Et je dois dire que je suis en train de me faire des cheveux blancs (et y a pas besoin de ça :sweat_smile:)

J’ai une VM debian 11 à jour qui tourne sur ESXi
Dessus j’ai installer Docker et tout ce qu’il faut.

J’ai réussi à créer mon premier container docker en ligne de commande et c’est Portainer

J’ai donc ma VM Debian en 192.168.1.53. Mon container Portainer est en 172.17.0.2 mode bridge et j’accède à son interface web en faisant http://192.168.1.53:9000 puisque j’ai utilisé ce port. Tout roule !

Maintenant histoire de me faire la main je me suis dit pourquoi pas avoir un container ADGuardHome.
De ce que je comprends il doit avoir une IP sur mon LAN, donc j’ai créé un macvlan pour que ce container ADGuard aie son IP sur mon LAN

docker network create -d macvlan -o parent=ens192 --subnet=192.168.1.0/24 --gateway=192.168.1.4 --ip-range=192.168.1.57/32 adguard-network

ens192 étant l’interface réseau que j’ai sur le debian qui host le tout.

Donc je balance mon container Adguard et la impossible de le pinguer sur son adresse

Bonjour,

Ta configuration macvlan a l’air bonne.
Tu peux tourner en macvlan ou bien en host c’est au choix. En host ca t’obligera a redirigé tout les ports il y en a quelques un mais docker te permet de le faire simplement

Comme tu es sur un esx, il faut t’assurer que tu as bien activer le promiscious mode sur le vswitch de ton esxi. Sinon ca marche pas.

Après je ne sais pas comment tu as créé ton ADguard mais comme tu as mis en place Portainer, il est préférable de passer par le stack de portainer.

Voici un exemple de stack ADguard qui inclus la création du macvlan

version: '3.7'
services:
  adguard:
    container_name: adguard
    image: adguard/adguardhome
    environment:
      - TZ=Europe/Paris
    ports:
      - 53/tcp
      - 53/udp
      - 80/tcp
      - 3000/tcp
      - 67/udp
      - 68/tcp
      - 68/udp
      - 443/tcp
      - 853/tcp
    volumes:
      - /data/docker/adguardhome/work:/opt/adguardhome/work
      - /data/docker/adguardhome/conf:/opt/adguardhome/conf
    networks:
      macvlan_prod:
        ipv4_address: 192.168.70.49
    restart: unless-stopped 


networks:
  macvlan_prod:
    name: macvlan_prod
    driver: macvlan
    enable_ipv6: false
    driver_opts:
      parent: ens192
    ipam:
      config:
        - subnet: 192.168.70.0/24
          ip_range: 192.168.70.48/28
          gateway: 192.168.70.1

Dans cet exemple, le macvlan est créé pour un réseau plus large (192.168.70.48/28) afin de pouvoir mettre plusieurs containers dedans au besoin.
L’adresse du container est fixé dans le service (dans l’exemple 192.168.40.49)

1 « J'aime »

Bonjour

Grand dieu tu viens de me sauver la mise ! J’étais sûr de l’avoir mis sur mon vswitch et bien non pas depuis ma réinstallation complète de ESXi !! Moi qui pensait merdouiller en Docker c’était mon vSwitch !!

Merci pour cette exemple. Je découvre Portainer donc je ne sais pas ou cela se fait… :innocent:

J’ai lu et vu aussi des fichiers yaml pour docker compose.

Donc si je comprends bien je dois avoir ce genre de fichier car une mise à jour d’un container docker c’est le supprimer et le recréer avec la dernière image et si je n’ai pas ce genre de fichiers je dois tout refaire à la main à chaque fois ! C’est bien cela ?

Merci en tout cas !

Il faut le faire dans le menu Stack de portaient en créant une nouvelle stack.
Une stack est un docker-compose qui contient l’ensemble des configurations réseaux, container, etc… pour un ou un ensemble de services.

Docket-compose peut aussi être utilisé en CLI mais portainer est tellement plus intuitif quand tu démarre.
Sache que un docker-compose en CLI ne peut pas être géré ensuite par Portainer. Tu les verras dedans mais c’est tout, ils seront verrouillés.

L’intérêt en effet avec docker c’est de mettre à jour les containers facilement.
Si il a était créé avec docker ou docker-compose, tu dois supprimer le container, supprimer la version de l’image, et recrée le container (qui téléchargera la dernière image). Sous portainer, tu vas dans ton docker, tu clique sur recrée et tu préciser que tu veux télécharger la dernière version d’image. Ça revient au même c’est juste plus rapide avec Portainer

1 « J'aime »

Bonjour,

Merci pour tous ces conseils avisés.

Comme j’ai pas mal chipoté :joy: je vais me refaire un VM en ordre sous Debian 11

J’y installer docker et docker-compose (j’en profiterai pour faire un bash que je récupérerai sur mon NAS comme cela, si je dois réinstaller un jour)

Ensuite je ferai mon container Portainer avec docker-compose, idem je récupérerai le fichier sur mon NAS

Enfin j’utiliserai Portainer pour le reste et je sauvegarderai mes stacks en fichier sur mon NAS également.

Un grand merci à toi pour tes explications et ton aide

Voici le mien si tu veux

version: "3.3"

services:
  portainer:
    container_name: portainer
    image: portainer/portainer-ce
    command: -H unix:///var/run/docker.sock
    restart: always
    #network_mode: bridge
    ports:
      - 192.168.70.10:9000:9000
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - portainer_data:/data
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.portainer.rule=Host(`portainer.mondomain.lan`)"
      - "traefik.http.routers.portainer.entrypoints=web"
      - "traefik.http.services.portainer.loadbalancer.server.port=9000"
      - "traefik.http.routers.portainer.service=portainer"
      - diun.enable=true

networks:
  default:
    driver: bridge

volumes:
  portainer_data:
      external: true
      name: portainer_data

T’as pas besoin des labels si tu utilise pas Diun et traefik

1 « J'aime »

Ah super merci, je vais l’adapter pour mon mcvlan :slight_smile:
Génial

J’ai encore une question, le nom du fichier à une importance ?
Ou doit on le stocker sur debian ?

Je suppose qu’avant il faut récupérer l’image du container de la sorte :

docker pull portainer/portainer-ce:lastest

Merci

A mon avis pour portainer tu as plus interet a le faire en host comme ma conf. Il n’y a qu’un port. Garde le macvlan pour les containers ne supportant pas le mode host ou ceux avec beaucoup de port a forwarder

Non aucune. Il faut juste bien l’appeler dans ta commande docker-compose

Oui sur ton host docker à l’emplacement de ton choix.

Non rien a faire, le docker-compose va le demander pour toi.
Une fois ton docker-compose créé, tu lances :

docker-compose -f portainer_deploy.yml -p portainer up -d

Et c’est tout.
Pour le mettre à jour ensuite je me suis fait ce petit bash

#!/bin/bash

# Stop portainer container
docker stop portainer
# Delete portainer container
docker rm portainer
# Remove portainer image to pull new version
docker rmi portainer/portainer-ce:latest
# Go to right Folder
cd /data/docker
# Recreate Portainer
docker-compose -f portainer_deploy.yml -p portainer up -d
2 « J'aime »

Super merci

Bon j’ai suivi ton conseil.
C’est-à-dire que j’ai créé le container Portainer en host

J’ai donc créé un dossier Docker, dedans j’ai créé le fichier yml et retirant les labels et en ajustant mon adresse ip par rapport à mon lan

root@Docker:/docker# docker-compose -f portainer_deploy.yml -p portainer up -d
[+] Running 4/4
 ⠿ portainer Pulled                                                                                                                                                                           36.3s
   ⠿ 772227786281 Pull complete                                                                                                                                                                1.4s
   ⠿ 96fd13befc87 Pull complete                                                                                                                                                                1.5s
   ⠿ b3238bddfe78 Pull complete                                                                                                                                                               32.8s
[+] Running 1/1
 ⠿ Network portainer_default  Created                                                                                                                                                          0.1s
external volume "" not found

Mais j’ai une erreur sur le external volume.
Il ne se créé pas via le yml ? Je dois le créer à la main ? La je dois dire que je pige pas tout

docker volume create portainer_data

Oui je l’avais historiquement créé manuellement pour ensuite passer par un compose.
Donc utilise la commande que tu as mis. Elle ne sert qu’une fois. Après si tu prefere tu peux le gérer dans ton compose.

Il me semble qu’en retirant le external dans la declaration du volume du compose, il te le créé mais il le supprime aussi si tu supprime le container a partir du compose. En le mettant en externe, il reste, ca evite les bétises :slight_smile:

Non cela me va bien de la faire à la main vu que ce n’est qu’une seul fois.

Hélàs, comme j’ai refait ma VM comme dit plus haut et que je veux passer par docker-compose et ce fichier que t m’as donné, j’ai des soucis que je n’avais pas eu en ligne de commande

Là j’ai ceci en erreur

Error response from daemon: driver failed programming external connectivity on endpoint portainer (68176c63309c955c8385d9d403fcf5c3721be530bc4111c6db8e96cd6570113f): Error starting userland proxy: listen tcp4 192.168.1.57:9000: bind: cannot assign requested address

Fait voir ton compose.

L’IP 192.168.1.57 c’est bien l’ip de ton host docker ?

Oh le boulet, c’est l’IP de l’ancienne VM !

Comme je suis parti de zero et que je suis en console j’ai même pas fait gaffe !!

Merci :pray: :pray: :pray: :pray:

Edit : c’est tout bon, nouvelle vm et portainer installé via compose…

Allez plus qu’a container avec portainer à présent :wink:

Bon encore moi…

Alors j’ai bien mon Portainer de fonctionnel :v:

J’ai réussi grâce à toi à mettre en place via stack un container pour AD Guard !
J’arrive à me connecter à ADGuard et faire la config.

Mais car il y a un mais… je viens de changer les paramètres de mon DHCP pour valider que ADGuard en container était fully functionnal et c’est le cas.

Par contre ma VM docker (DHCP) ne ping pas mon container ADGuard. Alors que toutes mes autres VM oui. Mon PC aussi.

C’est encore un paramètre à modifier dans Docker ?

C’est normal. C’est la façon dont le macvlan marche. Pas de configuration particulière.
Il y a une « astuce » en créant une autre macvlan pour gérer ca : Set up a PiHole using Docker MacVlan Networks — Blog :: Ivan Smirnov mais je l’ai jamais testé car j’en ai jamais eu besoin

Merci je vais potasser cela et ne manquerai de te tenir informé

En tout cas merci du temps passé.
Je vais continuer a apprendre car docker me paraît puissant plus que je ne pensais

Mais il a ses particularités.

T’es au top ! :star_struck:

Édit : je pourrai faire un tuto après pour ceux qui veulent se lancer. Comme moi. Le tout grâce a toi.

1 « J'aime »

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.