Aller au contenu

[TUTO] Docker : Introduction


.Shad.

Messages recommandés

Bonjour @Didier3L,

dans quel répertoire as-tu positionné le docker-compose ? Il peut être placé n'importe où, donc le mieux est de le mettre dans un répertoire séparé de celui d'installation.

De mon côté, j'ai l'arborescence suivante :

  • ./docker/
    • ./jeedom/
      • ./docker-compose.yaml             (<- docker-compose pour jeedom et mariadb)
      • ./html/                                           (<- mappé sur /var/www/html)
    • ./mariadb/
      • ./db/

Si le docker-compose est dans le répertoire ./html, alors oui l'installation va le supprimer lorsqu'il va initialiser Jeedom. Ce qui n'est évidemment pas souhaitable.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Je rencontre un petit problème avec la sélection d'un port USB où raccordé une antenne bluetooth.

Avec le conteneur et un réseau macvlan il m'est impossible de sélectionner ce port

StrokesPlus_TYl2WmaxZO.png.3af01a646a0c1bc07cf7e646ab80817a.png

image.png.ef5f3b5e9117fdcb5d32474230bb3c50.png

image.png.3a30ee2a5a2b68d25578e5a7f8dcbfe6.png

En fouillant sur google je suis tombé sur post qui parlé de mettre le conteneur en mode HOST

Ce qui m'arrange pas du tout ...

image.png

Modifié par Didier3L
Lien vers le commentaire
Partager sur d’autres sites

Non pas besoin, il faut juste monter l'USB dans le conteneur.
Quant à te dire lequel, je ne saurai pas, car jamais fait sur Syno.
Mais tout ce dont tu as besoin se trouve à mon avis dans /dev/bus/usb, il faudra faire un montage de volume entre le Syno et le conteneur.

Il faut identifier ce que tu as dans le conteneur jeedom dans /dev et trouver ce à quoi ça correspond, là je ne pourrai pas t'aider, plutôt sur les forums jeedom pour cette info.

Lien vers le commentaire
Partager sur d’autres sites

J'ai regardé pour le mappage des ports USB

J'arrive clairement à identifier les ports USB de 3 clés USB sur les 4

image.png.b322f599b277b307d90dbc7200e4d3cc.png


/dev/ttyUSB1 = Bus 001 Device 009: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter
/dev/ttyUSB0 = Bus 001 Device 006: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP2102/CP2109 UART Bridge Controller [CP210x family]
/dev/ttyACM0 = Bus 001 Device 005: ID 0658:0200 Sigma Designs, Inc. Aeotec Z-Stick Gen5 (ZW090) - UZB

Par contre pour ma clé USB Bluetooth, je ne sais ou la trouver ?
Bus 001 Device 010: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode) 

Lien vers le commentaire
Partager sur d’autres sites

Toujours à la recherche de mon problème pour mapper mon port USB avec une clé Bluetooth

je suis tombé sur un sujet avec un script qui permet de donner un nom au port USB du genre ttyZwave ou TTYrfcom

fix-usb-devices.sh

#!/bin/bash

mkdir -p /dev/serial/by-id

fix_usb_devices () {
    RULES_FILE="/lib/udev/rules.d/59-usb-serial.rules"

    for tty_path in $(find /sys/bus/usb/devices/usb*/ -name tty); do
        tty_iface_path=`dirname $tty_path`
        serial_device_path=`dirname $tty_iface_path`
        prefix=usb
        if test -f "$serial_device_path/idVendor"; then
            bInterfaceNumber=`cat $tty_iface_path/bInterfaceNumber`
        else
            bInterfaceNumber=`cat $serial_device_path/bInterfaceNumber`
            # We need to go up 1 level to get information
            serial_device_path=`dirname $serial_device_path`
            manufacturer=`cat $serial_device_path/manufacturer`
        fi
        idVendor=`cat $serial_device_path/idVendor`
        product=`cat $serial_device_path/product`
        idProduct=`cat $serial_device_path/idProduct`
        serial=`cat $serial_device_path/serial`

        if  [ ! -z "$manufacturer" ]; then
                symLink="${prefix}-${manufacturer}\_${product}\_${serial}-if${bInterfaceNumber}-port0"
                echo $SUBSYSTEM
        else 
                symLink="${prefix}-${idVendor}\_${product}\_${serial}-if${bInterfaceNumber}"
        fi
        line="SUBSYSTEM==\"tty\", ATTRS{idVendor}==\"${idVendor}\", ATTRS{idProduct}==\"${idProduct}\", SYMLINK+=\"serial/by-id/${symLink}\""
        echo $line
        
        grep -s $symLink $RULES_FILE >/dev/null || \
            echo ${line} >> $RULES_FILE
    done

    udevadm control --reload
	udevadm control --reload-rules && udevadm trigger
}

fix_usb_devices

 

Lien vers le commentaire
Partager sur d’autres sites

Lien vers le commentaire
Partager sur d’autres sites

De mon coté, je n'arrive même pas à avoir le USB actif...j'ai installé les différents paquets mais il ne voit pas le contrôleur. Je pensais que c'était à cause de la Machine Virtuelle qui utilisait (et donc bloquait) le contrôleur USB, je l'ai dont désactivé sur la MV mais rien n'y fait.

Je lance les commandes suivantes et obtient les messages suivant :

 

  • service bluetooth start
    [ ok ] Starting bluetooth: bluetoothd.
  • service bluetooth status
    [FAIL] bluetooth is not running ... failed!
  • rfkill list
    Can't open RFKILL control device: No such file or directory

Une idée pour me dépanner?

Modifié par Fredje_B
Lien vers le commentaire
Partager sur d’autres sites

Le 08/04/2020 à 10:06, .Shad. a dit :

Bonjour @shad

Oui mon docker compose à bien

privileged: true

image.png.287b3c9da53c467e67351c7ee744f6de.png

 

J'ai vu dans des forum avec une valeur

-itd

Qu'est-ce que c'est ?

 

 

 

Il y a 5 heures, Fredje_B a dit :

De mon coté, je n'arrive même pas à avoir le USB actif...j'ai installé les différents paquets mais il ne voit pas le contrôleur. Je pensais que c'était à cause de la Machine Virtuelle qui utilisait (et donc bloquait) le contrôleur USB, je l'ai dont désactivé sur la MV mais rien n'y fait.

Je lance les commandes suivantes et obtient les messages suivant :

 

  • service bluetooth start
    [ ok ] Starting bluetooth: bluetoothd.
  • service bluetooth status
    [FAIL] bluetooth is not running ... failed!
  • rfkill list
    Can't open RFKILL control device: No such file or directory

Une idée pour me dépanner?

C'est par ici que cela se passe https://community.jeedom.com/t/docker-mappage-des-ports-usb/22710

Lien vers le commentaire
Partager sur d’autres sites

Bonjour @shad @bruno78

Dans mon Dockerfile, je voudrais ajouter des instructions comme ajouter des lignes dans le fichier /etc/apt/sources.list

C'est bien comme cela ?

# Ajout dans /etc/apt/sources.list
RUN echo "deb-src http://deb.debian.org/debian stretch main non-free" >> /etc/apt/sources.list
RUN echo "deb-src http://deb.debian.org/debian stretch-updates main non-free" >> /etc/apt/sources.list
RUN echo "deb-src http://security.debian.org stretch/updates main non-free" >> /etc/apt/sources.list

Modifié par Didier3L
Lien vers le commentaire
Partager sur d’autres sites

Jamais touché à un Dockerfile encore, par contre si tu modifies l'image, quid des mises à jour de celle-ci ? Ça effacera tes modifications.

A ta place je partirais plutôt sur un script externe qui s'en chargera.

Éventuellement une ligne de commande dans le fichier compose, il faudra que tu te renseignes j'ai jamais eu besoin de le faire je ne peux pas t'aiguiller mais je sais que ça existe.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour @Didier3L, @.Shad.,

a priori il y a 2 solutions :

  1. utiliser la commande (dans un script)  docker exec -it <jeddom-docker-name> <commande> . Attention ça ne marche pas à tous les coups ! j'ai déjà eu des surprises. A tester donc.
  2. Ma préférence : éditer le fichier localement sur son NAS, et faire un montage dans le docker via la directive "volume:" du docker-compose.yaml et faire le montage en read-only :

volumes:
       - "/volume1/docker/jeedom/html:/var/www/html"
       - "/volume1/docker/jeedom/aptsources.list:/etc/apt/sources.list:ro"

 

Bruno78

Lien vers le commentaire
Partager sur d’autres sites

Je ne l'ai pas proposé car pour moi c'est risqué, le jour où ils changent les repositories, on l'a dans l'os avec notre fichier monté.

Et par ligne de commande certes oui, mais ça nécessite une étape supplémentaire. Il peut par exemple définir un script, avec une temporisation en entrée, et l'ajout via >> de ses repositories. Et demander l'exécution de ce fichier dans le compose via l'argument "command:"

Lien vers le commentaire
Partager sur d’autres sites

D'accord, mais je ne sais pas si les repositories changent fréquemment ? Sinon c'est quand même assez pratique

Effectivement, il y a aussi l'argument "command" dans le docker-compose. Je n'y avais pas pensé

Lien vers le commentaire
Partager sur d’autres sites

il y a 1 minute, bruno78 a dit :

D'accord, mais je ne sais pas si les repositories changent fréquemment ? Sinon c'est quand même assez pratique

Dans les faits, non.
Mais le problème c'est que c'est le dernier endroit où personnellement je penserais à aller regarder en cas de problème.
Je pourrais tourner des jours à mon avis.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour @bruno78

J'ai un peu de mal avec les adresse IP attribuées par macvlan

j'ai créé un réseau macvlan

docker network create \
-d macvlan \
--subnet=192.168.1.0/24 \
--ip-range=192.168.1.240/29 \
--gateway=192.168.1.254 \
--aux-address="host_bridge=192.168.1.241" \
-o parent=eth0 \
mymacvlan

J'ai créée le routage comme suit

ip link add macvlan-br0 link eth0 type macvlan mode=bridge
ip addr add 192.168.1.241/32 dev macvlan-br0
#
ip link set dev macvlan-br0 address 0:1:2:3:4:5
ip link set macvlan-br0 up
#
ip route add 192.168.1.240/29 dev macvlan-br0

Jusque la pas de problème ...

ensuite  j'ai créé un docker-compose avec deux conteneurs

Jeedom avec une adresse 192.168.1.240
MariaDB avec une adresse 192.168.1.242
L'adrese 192.168.1.241 étant réservé pour atteindre l'hote.

version: '2'

networks:
    default:
        external:
             name: mymacvlan

services:
    jeedom:
        container_name: jeedom-db-macvlan
        build : ./
        hostname: jeedom
        mac_address: a0:ca:ab:cd:ef:01
        networks:
             default:
                ipv4_address: 192.168.1.240
        volumes:
             - "/volume1/docker/jeedom-db-macvlan/html/:/var/www/html"
        devices:
             - "/dev/ttyUSB0:/dev/ttyUSB0"
             - "/dev/ttyUSB0:/dev/ttyUSB1"
             - "/dev/ttyACM0:/dev/ttyACM0"
        restart: unless-stopped
        environment:
             - PUID=1032
             - PGID=101
             - TZ=Europe/Paris
             - MODE_HOST=0
             - SSH_PORT=22
             - APACHE_PORT=80
             - SSH_PASSWORD=Jeedom
             - ROOT_PASSWORD=Jeedom
             - SHELL_ROOT_PASSWORD=Mjeedom96
             - PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
        depends_on:
             - mariadb
    
    mariadb:
        container_name: mariadb
        image: mariadb:latest
        hostname: mariadb
        mac_address: a0:ca:ab:cd:ef:02
        networks:
             default:
                ipv4_address: 192.168.1.242
        environment:
             - MYSQL_ROOT_PASSWORD=jeedom
             - MYSQL_DATABASE=jeedom
             - MYSQL_USER=jeedom
             - MYSQL_PASSWORD=jeedom
        volumes:
             - "/volume1/docker/mariadb/db:/val/lib/mysql"

Mais l'adresse 192.168.1.242 pour MariaDB n'est pas accessible ...
un ping depuis mon PC ne donne rien

As tu une idée ? peut être le nombre d'adresse ?

Lien vers le commentaire
Partager sur d’autres sites

Bonjour @Didier3L,

je pense que l'erreur est d'avoir attribué la 192.168.1.140 à Jeedom. L'adresse 192.168.1.140 représente le réseau, je ne pense pas que l'on puisse l'utiliser ici.

Peux-tu refaire l'essai en attribuant par exemple 192.168.1.142 à mariadb comme tu l'as fait, et 192.168.1.143 à Jeedom au lieu de .140 ? (donc modif juste dans la partie service pour Jeedom)

Lien vers le commentaire
Partager sur d’autres sites

il y a 11 minutes, bruno78 a dit :

Bonjour @Didier3L,

je pense que l'erreur est d'avoir attribué la 192.168.1.140 à Jeedom. L'adresse 192.168.1.140 représente le réseau, je ne pense pas que l'on puisse l'utiliser ici.

Peux-tu refaire l'essai en attribuant par exemple 192.168.1.142 à mariadb comme tu l'as fait, et 192.168.1.143 à Jeedom au lieu de .140 ? (donc modif juste dans la partie service pour Jeedom)

ok Je vais mettre 192.168.242 et 192.168.243

Merci

 

Modifié par Didier3L
Lien vers le commentaire
Partager sur d’autres sites

Màj du 14/05/2020 :

Le tutoriel a été retravaillé, certains points ont été mis en avant, afin de faciliter la compréhension de la philosophie sous-jacente.
Ajout d'informations dans la section Réseaux (avancé) suite aux discussions des pages précédentes, avec notamment l'apport de @bruno78

Modifié par .Shad.
Lien vers le commentaire
Partager sur d’autres sites

Bonsoir !

Tuto très instructif, qui m'a aidé à me lancer sur docker sur ds218+, merci du temps consacré pour le mettre en forme (et tous les autres d'ailleurs). Je m'en sers notamment pour pihole avec driver macvlan, ainsi que pour une instance hass.io en bridge je pense (puisque pas de ports doublons).

Il y a une phrase que je ne comprends pas dans l'ajout "réseau" du tuto, quelqu'un pourrait-il me l'expliquer ?

Citation

Attention cependant, en macvlan, l'hôte ne peut plus communiquer, via son interface physique, avec le conteneur !! Ce n'est pas gênant dans le cas du contrôleur Unifi d'Ubiquity, mais beaucoup plus dans le cas de Pihole par exemple.

Ca pourrait expliquer un souci que j'ai sur hass.io. Ce dispositif intègre notamment un dispositif d'extensions, qui permet de monter simplement des conteneurs complémentaires liés à l'instance principale. Je l'ai fait pour installer simplement un broker mqtt sur un port dédié (3000). A vérifier quand je rentrerai chez moi, mais c'est pas impossible que hass.io + les conteneurs extensions soient sur un réseau bridge dédié. J'en arrive à la problématique : je dois lier l'ip du broker dans hass.io, ça fonctionne quand je renseigne "localhost", mais pas quand je renseigne ip_nas:3000. Pourtant j'arrive à lier les appareils domotiques sur le broker via l'ip_nas:3000. Cela pourrait-il être lié à cette histoire de réseau ?

Je sais pas si c'est lié, mais hass.io n'arrive pas à contacter mon contrôleur unifi, monté sur une ip dédiée via macvlan. 

Si vous avez des pistes de solution, je suis preneur, mais sinon tant pis 🙂

Merci d'avance, bonne soirée !

Modifié par Phenix21
Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.