Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2736 connectés 

 


 Mot :   Pseudo :  
  Aller à la page :
 
 Page :   1  2  3  4  5  ..  21  22  23  ..  50  51  52  53  54  55
Auteur Sujet :

[TOPICUNIK] Docker

n°1441212
phraide
Posté le 04-12-2019 à 19:30:00  profilanswer
 

Reprise du message précédent :

Fredouye a écrit :


En parlant de Traefik, j'ai essayé de passer de la version 1.7 à la version 2. Bah j'ai pas réussi à utiliser un certificat wildcard Let's Encrypt, ni à activer la redirection automatique HTTP -> HTTPS :(


 
c'est blaizou il suffit de suivre pleins de tutos de noobs sur l'intraweb 3.0 :o
 
Je me suis un peu pris la tête ... voici un résumé de ce que j'ai fait.
si tu trouves plus simple je prend ... ca prends kkes lignes mais bloc par bloc tout est logique.
 

  • lancement de traefik2 :


J'utilise le mode ligne de commande pour cette partie (captialisé dans un playbook ansible :o), migrable vers fichier toml etc ... cf doc officielle
 
config docker :
      - --providers.docker=true
      - --providers.docker.swarmMode=true
      - --providers.docker.exposedbydefault=false
      - --providers.docker.network=traefik
 
config entrypoint:
      - --entrypoints.http.address=:80
      - --entrypoints.https.address=:443
 
    http et https sont les noms des entrypoints, tu peux les nommer toto et lulu, ce sont les ports qui comptent
 
config acme :
      # - --certificatesresolvers.default.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory
      - --certificatesresolvers.default.acme.dnschallenge=true
      - --certificatesresolvers.default.acme.dnschallenge.provider=gandiv5
      - --certificatesresolvers.default.acme.email={{letsencrypt_email}}
      - --certificatesresolvers.default.acme.storage=/opt/traefik/acme.json
      - --certificatesresolvers.default.acme.dnschallenge.delaybeforecheck=0
 
    "default" sera le nom du resolver utilisé plus tard, important à retenir
 
 

  • label du service traefik (swarm) pour que traefik s'auto-traefik sur 80/443 au lieu de 8080


      # a cause du exposedbydefault=false  
      traefik.enable: "true"
 
     # déclaration d'un service http  
      traefik.http.routers.traefik-http.rule: "Host(`traefik.{{ dns_domain }}`)"
      traefik.http.routers.traefik-http.entrypoints: "http"
      traefik.http.services.traefik-http.loadbalancer.server.port: "8080"
      traefik.http.routers.traefik-http.service: "traefik-http"
 
     # declaration du service https
      traefik.http.services.traefik-https.loadbalancer.server.port: "8080"
      traefik.http.routers.traefik-https.rule: "Host(`traefik.{{ dns_domain }}`)"
      traefik.http.routers.traefik-https.entrypoints: "https"
      traefik.http.routers.traefik-https.service: "traefik-https"
 
      # le https s'active sr le provider "default" déclaré avant, obligatoire de le préciser
      traefik.http.routers.traefik-https.tls: "true"
      traefik.http.routers.traefik-https.tls.certresolver: "default"
 
      # certif wildcard à faire générer :
      traefik.http.routers.traefik-https.tls.domains[0].main: "{{ dns_domain }}"
      traefik.http.routers.traefik-https.tls.domains[0].sans: "*.{{ dns_domain }}"
 
     # déclaration d'un middlerware qui sera utilisable par tout le monde pour une redirection auto vers https
      traefik.http.middlewares.https_redirect.redirectscheme.scheme: "https"
      traefik.http.middlewares.https_redirect.redirectscheme.port: "443"
 

  • et enfin, labels pour un service standard, par exemple portainer sur port 9000


      traefik.enable: "true"
 
      traefik.http.routers.portainer-http.entrypoints: "http"
      traefik.http.routers.portainer-http.rule: "Host(`portainer.{{ dns_domain }}`)"
      traefik.http.routers.portainer-http.service: "portainer-http"
      traefik.http.services.portainer-http.loadbalancer.server.port: "9000"
 
 
      traefik.http.routers.portainer-https.entrypoints: "https"
      traefik.http.routers.portainer-https.rule: "Host(`portainer.{{ dns_domain }}`)"
      traefik.http.routers.portainer-https.service: "portainer-https"
      traefik.http.services.portainer-https.loadbalancer.server.port: "9000"
 
      traefik.http.routers.portainer-https.tls: "true"
      traefik.http.routers.portainer-https.tls.certresolver: "default"
 
      # utilisation du middleware de redirection auto pour ce container
      traefik.http.routers.portainer-http.middlewares: "https_redirect"
 
 


---------------
I'm too old for this shit.
mood
Publicité
Posté le 04-12-2019 à 19:30:00  profilanswer
 

n°1441290
Fredouye
Shivers !
Posté le 05-12-2019 à 16:53:21  profilanswer
 

Un grand merci pour ton aide :jap:
Tout fonctionne, Let's Encrypt avec certificat wildcard, redirection HTTP -> HTTPS, pour mes containers ou des sites externes.
J'ai ajouté des middlewares pour l'authentification, l'ajout de préfixe et de headers.
 
Ce qui est dommage avec la version 2.0 (qui amène plein de choses intéressantes), c'est que la configuration est parfois beaucoup plus verbeuse...
D'après la doc, la redirection HTTP -> HTTPS est possible : https://blog.containo.us/traefik-2- [...] 2893944b9d

      # middleware redirect
      - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
      # global redirect to https
      - "traefik.http.routers.redirs.rule=hostregexp(`{host:.+}`)"
      - "traefik.http.routers.redirs.entrypoints=web"
      - "traefik.http.routers.redirs.middlewares=redirect-to-https"

Citation :

In English, the first label means, “Hey Traefik! (traefik.) let’s declare an HTTP middleware (http.middlewares.) we’ll call redirect-to-https (redirect-to-https.). It’s a RedirectScheme middleware (redirectscheme.) that will force the scheme to https (scheme=https).”
Then, let’s see the router part, “Hey Traefik! (you know the drill) (traefik.) I have an HTTP router (http.routers.) I’ll call redirs (redirs.) that will match requests on any host (rule=hostregexp(`{host:.+}`)) Yes sir! I’m insane and will catch everything, that’s how greedy I am.”
Then, we add, “Hey Traefik! (traefik.) I was kidding … the redirs HTTP router (http.routers.redirs.) won’t catch everything but just requests on port 80 (entrypoints=web).”
Finally, we’ll add the redirect middleware to the router. “Traefik? (traefik.) On the redirs HTTP router (http.routers.redirs.) we’ll add the redirect-to-https middleware (middlewares=redirect-to-https).”


Sauf que non :D : https://community.containo.us/t/a-g [...] tion/864/8

Citation :

Yes you need to read 2 routers for each redirection.
 
We know the problem and we plan to think about a new redirection system.


---------------
Le dernier arrivé est fan de Phil Collins
n°1441295
kaari
Fuck Yeah !
Posté le 05-12-2019 à 17:25:29  profilanswer
 

Bah, faut leur lassier le temps, traefik 2.0 est tout nouveau et vu ce qu'ils essayent d'implementer (router tcp), c'est tout a fait louable amha.


---------------
Mon topic ventes ;)
n°1441316
Fredouye
Shivers !
Posté le 05-12-2019 à 22:38:46  profilanswer
 

Ah ce n'était pas une critique, je viens de me mettre à Docker et je trouve Traefik fantastique :)
 
Comme ça "m'embêtait" d'avoir une config aussi redondante, j'ai continué à chercher...Et ceci m'a bien aidé : https://community.containo.us/t/why [...] se-v2/3252
- utilisation de api@internal au lieu d'un entry point
- routeur qui matche toutes les URLs, avec un middleware de redirection http > https
 
Du coup ça me donne cette config, très réduite :
 

command:
      # dashboard
      - --api.dashboard=true
      # Docker
      - --providers.docker=true
      - --providers.docker.exposedbydefault=false
      - --providers.docker.network=traefik
      # entry points
      - --entrypoints.http.address=:80
      - --entrypoints.https.address=:443
      # ACME
      - --certificatesresolvers.default.acme.dnschallenge=true
      - --certificatesresolvers.default.acme.dnschallenge.provider=ovh
      - --certificatesresolvers.default.acme.email=admin@domaine.com
      - --certificatesresolvers.default.acme.storage=/acme.json
      - --certificatesresolvers.default.acme.dnschallenge.delaybeforecheck=0
 
labels:
      # parce que exposedbydefault=false
      traefik.enable: "true"
      # routeur pour le dashboard
      traefik.http.routers.api.rule: "Host(`traefik.domaine.com`)"
      traefik.http.routers.api.service: "api@internal"
      traefik.http.routers.api.entrypoints: "https"
      # déclaration d'un middleware d'auth
      traefik.http.middlewares.auth.basicauth.users: "xxxx:XXXXXXXXXXX"
      traefik.http.routers.api.tls.certresolver: "default"
      # certif wildcard à faire générer
      traefik.http.routers.api.tls.domains[0].main: "domaine.com"
      traefik.http.routers.api.tls.domains[0].sans: "*.domaine.com"
      # redirection par défaut http > https pour tous les routeurs
      traefik.http.routers.http-catchall.rule: "hostregexp(`{host:.+}`)"
      traefik.http.routers.http-catchall.entrypoints: "http"
      traefik.http.routers.http-catchall.middlewares: "redirect-to-https@docker"
      traefik.http.middlewares.redirect-to-https.redirectscheme.scheme: "https"
      # utilisation du middleware auth pour le dashboard
      traefik.http.routers.api.middlewares: "auth"


Et pour un container :
 

labels:
      traefik.enable: "true"
      traefik.http.routers.portainer.rule: "Host(`portainer.domaine.com`)"
      traefik.http.routers.portainer.service: "portainer"
      traefik.http.routers.portainer.entrypoints: "https"
      traefik.http.routers.portainer.tls.certresolver: "default"
      traefik.http.services.portainer.loadbalancer.server.port: "9000"


---------------
Le dernier arrivé est fan de Phil Collins
n°1441333
Celos
Posté le 06-12-2019 à 13:10:34  profilanswer
 

Toute ta conf traefik tu l'as dans tes paramètres docker ? Pas de fichier de conf type .toml ou .yml à part ?

n°1441336
dough29
Posté le 06-12-2019 à 15:03:27  profilanswer
 

le "file" tu n'en as vraiment besoin que si tu as des "routes" à déterminer manuellement, ce qui peut être à la charge d'un autre reverse en amont plutôt qu'à un Traefik connecté à l'API Docker :sol:

n°1441338
Fredouye
Shivers !
Posté le 06-12-2019 à 15:09:19  profilanswer
 

J'utilise le provider 'file' pour les sites extérieurs à Docker, et pour paramétrer certaines options (comme TLS 1.2).
 
Dans mon docker-compose.yml :
 

     - --providers.file.directory=/external_sites
     - --providers.file.watch=true


 
Dans ce répertoire, 1 fichier avec des valeurs "par défaut" :
 

tls:
  options:
    default:
      minVersion: VersionTLS12
      sniStrict: true


 
Et un fichier par appli extérieure à Docker, et que Traefik doit gérer.


Message édité par Fredouye le 06-12-2019 à 15:25:37

---------------
Le dernier arrivé est fan de Phil Collins
n°1441343
frenchieis​verige
Nej, men HEJSAN!
Posté le 06-12-2019 à 18:28:21  profilanswer
 

:hello: les pros de Docker
 
J'ai un petit soucis avec les "bind mount" :pt1cable:  
 
Je me suis écrit un petit script python qui vient périodiquement lire un fichier de config dans le dossier /config et voir si on contenu n'a pas changé. Si oui, il doit réagir. Le script marche bien sous Linux, mais j'aimerais pouvoir le "Dockeriser".
Mon problème donc est quand je mappe /config du conteneur avec un dossier /config du host, le fichier de config n'est pas présent. Alors qu'il est bien présent à la construction du conteneur: RUN ls ./config me retourne bien le fichier de config :sweat:  
 
Une idée?
 
Merci par avance :jap:


---------------
[TU]: Linux Mint | NAS Homemade | Noyau Linux | OpenMediaVault | Windows 11
n°1441347
XaTriX
Posté le 06-12-2019 à 19:13:00  profilanswer
 

Utilise inotify/incrond ?


---------------
Proxytaf ? porn, xxx, hentai, camgirl, onlyfans, torrent, warez, crack, keygen, serials, darknet, tor, vpn, proxy, hacktool, metasploit, sql injection, password list, brute force, cp, gore, deepweb
n°1441348
Celos
Posté le 06-12-2019 à 19:38:35  profilanswer
 

dough29 a écrit :

le "file" tu n'en as vraiment besoin que si tu as des "routes" à déterminer manuellement, ce qui peut être à la charge d'un autre reverse en amont plutôt qu'à un Traefik connecté à l'API Docker :sol:


 
J’utilise traefik même pour mes sites extérieurs à docker, d’où ma conf par fichier toml

mood
Publicité
Posté le 06-12-2019 à 19:38:35  profilanswer
 

n°1441349
frenchieis​verige
Nej, men HEJSAN!
Posté le 06-12-2019 à 21:17:00  profilanswer
 

XaTriX a écrit :

Utilise inotify/incrond ?


 
Merci pour la découverte, mais mon problème n'est pas la. C'est quand je veux mapper le dossier /config de mon conteneur contenant un fichier de config et un dossier /config sur le host. Le fichier de config n'est pas copié sur le host :/


---------------
[TU]: Linux Mint | NAS Homemade | Noyau Linux | OpenMediaVault | Windows 11
n°1441351
LOL POLARI​SE
cadre en trading
Posté le 06-12-2019 à 22:17:52  profilanswer
 

frenchieisverige a écrit :

:hello: les pros de Docker
 
J'ai un petit soucis avec les "bind mount" :pt1cable:  
 
Je me suis écrit un petit script python qui vient périodiquement lire un fichier de config dans le dossier /config et voir si on contenu n'a pas changé. Si oui, il doit réagir. Le script marche bien sous Linux, mais j'aimerais pouvoir le "Dockeriser".
Mon problème donc est quand je mappe /config du conteneur avec un dossier /config du host, le fichier de config n'est pas présent. Alors qu'il est bien présent à la construction du conteneur: RUN ls ./config me retourne bien le fichier de config :sweat:  
 
Une idée?
 
Merci par avance :jap:


 
Quand tu fais :
 

Code :
  1. RUN ls ./config


 
il vérifie que le fichier est présent dans le répertoire courant, qui n'est pas nécessairement la racine.
 
Donc soit tu changes ton WORKDIR, soit tu fais :
 

Code :
  1. RUN ls /config


 
pour vérifier.
 
Rien à voir avec les bind mounts au passage, qui sont des mounts faits à l'instanciation de l'image (démarrage du conteneur) et pas des fichiers rajoutés pendant le build.
 
Donc en résumé :
 
- si tu veux le fichier présent dans l'image, tu fais un
 

Code :
  1. ADD /mon/fichier /fichier


 
pendant le build ;
 
- si tu veux que le fichier soit présent au démarrage du conteneur tu fais :
 

Code :
  1. docker run [--tes-options] -v /mon/fichier:/fichier $conteneur

n°1441353
Celos
Posté le 07-12-2019 à 07:59:41  profilanswer
 

Certains ont réussi à se faire une instance cozy cloud https://cozy.io/fr/ sous docker ?

n°1441360
frenchieis​verige
Nej, men HEJSAN!
Posté le 07-12-2019 à 12:16:46  profilanswer
 

LOL POLARISE a écrit :


 
Quand tu fais :
 

Code :
  1. RUN ls ./config


 
il vérifie que le fichier est présent dans le répertoire courant, qui n'est pas nécessairement la racine.
 
Donc soit tu changes ton WORKDIR, soit tu fais :
 

Code :
  1. RUN ls /config


 
pour vérifier.
 
Rien à voir avec les bind mounts au passage, qui sont des mounts faits à l'instanciation de l'image (démarrage du conteneur) et pas des fichiers rajoutés pendant le build.
 
Donc en résumé :
 
- si tu veux le fichier présent dans l'image, tu fais un
 

Code :
  1. ADD /mon/fichier /fichier


 
pendant le build ;
 
- si tu veux que le fichier soit présent au démarrage du conteneur tu fais :
 

Code :
  1. docker run [--tes-options] -v /mon/fichier:/fichier $conteneur



 
C'est ce que j'ai l'impression de faire dans mon Dockerfile:

Code :
  1. FROM python:3.8-slim-buster
  2. # Environment and build variables‚
  3. ARG build_update_rate=6
  4. ENV update_rate=${build_update_rate}
  5. # Install libraries
  6. WORKDIR /usr/src/app
  7. COPY requirements.txt ./
  8. RUN pip install --no-cache-dir -r requirements.txt
  9. WORKDIR /
  10. COPY . .
  11. # Start script
  12. CMD [ "sh", "-c", "python ./mon-script.py -u $update_rate" ]


 
Le dossier /config est copié avec la commande COPY . .
Mais lorsque je veux démarrer mon image, le script me dit qu'il ne trouve pas le fichier txt dans config :pfff:  


---------------
[TU]: Linux Mint | NAS Homemade | Noyau Linux | OpenMediaVault | Windows 11
n°1441505
Fredouye
Shivers !
Posté le 10-12-2019 à 10:44:34  profilanswer
 

Certains mettent à jour automatiquement leurs containers ?

 

J'ai installé Ouroboros, un "concurrent" de Watchtower
Ce que je trouve sympa avec Ouroboros :
- mise à jour de tous les containers (avec possibilité d'en exclure), ou via des labels
- mode dry run
- notifications Slack, Teams, Pushbullet, etc. (via Apprise)
- scheduling simple (toutes les x heures/jours) ou avec la syntaxe cron
- il peut faire le ménage dans les images

 

C'est top pour les images souvent mises à jour :o

 

https://reho.st/preview/self/68b1197f9948b75769ad5b9389b745c80f1d796a.jpg

Message cité 1 fois
Message édité par Fredouye le 10-12-2019 à 10:45:51

---------------
Le dernier arrivé est fan de Phil Collins
n°1441506
dough29
Posté le 10-12-2019 à 10:48:50  profilanswer
 

Ca revert tout seul en cas de fail ? :heink:

n°1441507
the_big_po​ulet
Flying chicken
Posté le 10-12-2019 à 10:48:55  profilanswer
 

frenchieisverige a écrit :


 
C'est ce que j'ai l'impression de faire dans mon Dockerfile:

Code :
  1. FROM python:3.8-slim-buster
  2. # Environment and build variables‚
  3. ARG build_update_rate=6
  4. ENV update_rate=${build_update_rate}
  5. # Install libraries
  6. WORKDIR /usr/src/app
  7. COPY requirements.txt ./
  8. RUN pip install --no-cache-dir -r requirements.txt
  9. WORKDIR /
  10. COPY . .
  11. # Start script
  12. CMD [ "sh", "-c", "python ./mon-script.py -u $update_rate" ]


 
Le dossier /config est copié avec la commande COPY . .
Mais lorsque je veux démarrer mon image, le script me dit qu'il ne trouve pas le fichier txt dans config :pfff:  


COPY . .  
 
 :??:  
 
Pourquoi pas plutot un :
MKDIR /config/
COPY config/monfichier /config/
 
Par contre si tu met ton fichier dans le container et qu'il est pas monté sur un volume du host, qui est censé modifier ce fichier avec détection par le container ? [:tinostar]

n°1441508
Je@nb
Kindly give dime
Posté le 10-12-2019 à 11:15:53  profilanswer
 

Fredouye a écrit :

Certains mettent à jour automatiquement leurs containers ?  
 
J'ai installé Ouroboros, un "concurrent" de Watchtower  
Ce que je trouve sympa avec Ouroboros :  
- mise à jour de tous les containers (avec possibilité d'en exclure), ou via des labels  
- mode dry run  
- notifications Slack, Teams, Pushbullet, etc. (via Apprise)  
- scheduling simple (toutes les x heures/jours) ou avec la syntaxe cron  
- il peut faire le ménage dans les images  
 
C'est top pour les images souvent mises à jour :o  
 
https://reho.st/preview/self/68b119 [...] 1d796a.jpg


J'utilise depuis pas mal de temps sur mon syno et ouais c'est top

n°1441511
frenchieis​verige
Nej, men HEJSAN!
Posté le 10-12-2019 à 12:45:05  profilanswer
 

the_big_poulet a écrit :


COPY . .  
 
 :??:  
 
Pourquoi pas plutot un :
MKDIR /config/
COPY config/monfichier /config/
 
Par contre si tu met ton fichier dans le container et qu'il est pas monté sur un volume du host, qui est censé modifier ce fichier avec détection par le container ? [:tinostar]


 
Justement c'est peut être cette étape qui me manque.  
C'est ce que j'essayais maladroitement d'expliquer quand j'ai ecrit "quand je mappe /config du conteneur avec un dossier /config du host, le fichier de config n'est pas présent" [:tinostar]
Je teste ce soir si je peux :jap:


---------------
[TU]: Linux Mint | NAS Homemade | Noyau Linux | OpenMediaVault | Windows 11
n°1441514
the_big_po​ulet
Flying chicken
Posté le 10-12-2019 à 13:51:34  profilanswer
 

frenchieisverige a écrit :


 
Justement c'est peut être cette étape qui me manque.  
C'est ce que j'essayais maladroitement d'expliquer quand j'ai ecrit "quand je mappe /config du conteneur avec un dossier /config du host, le fichier de config n'est pas présent" [:tinostar]
Je teste ce soir si je peux :jap:


Alors oublie ça.
Retire ta commande COPY de ton dockerfile et remplace la par  
 
MKDIR /config
 
Ensuite qd tu démarres ton container tu fais comme l'a suggéré frenchieisverige et tu ajoutes  

-v /[b]path[/b]/[b]mon_fichier[/b]:/config/[b]mon_fichier[/b]


a ta commande docker run avec path = chemin ou se trouve ton fameux fichier sur le host qui tourne docker et mon_fichier= bin le nom de ton fichier.

n°1441515
kaari
Fuck Yeah !
Posté le 10-12-2019 à 14:18:50  profilanswer
 

Salut :hello:
 
Lorsque tu lance un build avec docker, il va faire la liste de tous les fichiers presents a partir du niveau de repertoire ou se trouve ton fichier docker. Si tu essaye de COPY ou faire une autre command docker dans ton Dockerfile avec en parametre un fichier qui n'est pas dans cette liste, il ne copiera rien.
 
C'est pour ca que le Dockerfile se trouve generalement a la racine du projet.
 
Aka, place ton fichier config dans un repertoire au moins aussi profond que celui dans lequel se trouve ton Dockerfile, et ton fichier sera bien copie.
 
Exemple:
Ici, ton my-project.war ne pourra pas etre copie dans ton image docker:


.
├── contrib
│   ├── aws
│   └── docker
│       └── Dockerfile
├── pom.xml
├── src
│   ├── main
│   └── test
└── target
    └── my-project.war


Mais ici, ton .war sera bien copie:


.
├── contrib
│   ├── aws
│   └── docker
│       ├── Dockerfile
│       └── my-project.war
├── pom.xml
├── src
│   ├── main
│   └── test
└── target


 
PS: Je ne pense pas que tu puisse te demerder avec un symlink (et amha ca ne devrait pas), mais un hardlink peut etre une bonne solution pour le resoudre (avec les implications que cela provoque).

Message cité 1 fois
Message édité par kaari le 10-12-2019 à 14:29:04

---------------
Mon topic ventes ;)
n°1441547
frenchieis​verige
Nej, men HEJSAN!
Posté le 11-12-2019 à 12:20:34  profilanswer
 

the_big_poulet a écrit :


Alors oublie ça.
Retire ta commande COPY de ton dockerfile et remplace la par  
 
MKDIR /config
 
Ensuite qd tu démarres ton container tu fais comme l'a suggéré frenchieisverige et tu ajoutes  

-v /[b]path[/b]/[b]mon_fichier[/b]:/config/[b]mon_fichier[/b]


a ta commande docker run avec path = chemin ou se trouve ton fameux fichier sur le host qui tourne docker et mon_fichier= bin le nom de ton fichier.


 
Euh, frenchieisverige c'est moi :whistle:  
J'ai remplacé mon COPY . . par RUN mkdir /config et COPY config/config.txt /config, mais le résultat est le même, pas de config.txt sur mon host. J'ai testé:

  • mapper le dossier /config du container avec un /config sur mon host
  • mapper le fichier /config/config.txt du container avec un /config/config.txt sur mon host

Cette dernière me donnant une erreur "Are you trying to mount a directory onto a file or vice-versa"
 

kaari a écrit :

Salut :hello:
 
Lorsque tu lance un build avec docker, il va faire la liste de tous les fichiers presents a partir du niveau de repertoire ou se trouve ton fichier docker. Si tu essaye de COPY ou faire une autre command docker dans ton Dockerfile avec en parametre un fichier qui n'est pas dans cette liste, il ne copiera rien.
 
C'est pour ca que le Dockerfile se trouve generalement a la racine du projet.
 
Aka, place ton fichier config dans un repertoire au moins aussi profond que celui dans lequel se trouve ton Dockerfile, et ton fichier sera bien copie.
 
Exemple:
Ici, ton my-project.war ne pourra pas etre copie dans ton image docker:


.
├── contrib
│   ├── aws
│   └── docker
│       └── Dockerfile
├── pom.xml
├── src
│   ├── main
│   └── test
└── target
    └── my-project.war


Mais ici, ton .war sera bien copie:


.
├── contrib
│   ├── aws
│   └── docker
│       ├── Dockerfile
│       └── my-project.war
├── pom.xml
├── src
│   ├── main
│   └── test
└── target


 
PS: Je ne pense pas que tu puisse te demerder avec un symlink (et amha ca ne devrait pas), mais un hardlink peut etre une bonne solution pour le resoudre (avec les implications que cela provoque).


 
Ma structure de mon projet est la suivante:


.
├── config
│   └── config.txt
├── Dockerfile
├── mon-script.py
└── requirements.txt


 
Donc config.txt est bien "n+1" profond par rapport à mon Dockerfile.
WORKDIR / et COPY . . me copient théoriquement tout à la racine du conteneur. Et donc le mappage /config du container sur mon host devrait fonctionner mais pas la copie.
J'ai l'impression que je vais devoir modifier mon script pour qu'il copie le fichier dans /config :o
 
EDIT:
En fait mon problème n'est pas lors de la construction de mon conteneur mais bien à l'exécution de mon conteneur.

Message cité 1 fois
Message édité par frenchieisverige le 11-12-2019 à 12:29:19

---------------
[TU]: Linux Mint | NAS Homemade | Noyau Linux | OpenMediaVault | Windows 11
n°1441548
kaari
Fuck Yeah !
Posté le 11-12-2019 à 12:41:32  profilanswer
 

frenchieisverige a écrit :


pas de config.txt sur mon host.


 
Comment tu teste ?
Est-ce que tu lance avec "docker run -it <image> /bin/bash" pour voir si ton fichier est la ?
Quelles sont les permissions du fichier s'il est bien la ?
 
 
Il n'y a pas de raison que ton COPY config/ ne fonctionne pas.

Message cité 1 fois
Message édité par kaari le 11-12-2019 à 12:42:00

---------------
Mon topic ventes ;)
n°1441549
frenchieis​verige
Nej, men HEJSAN!
Posté le 11-12-2019 à 12:58:35  profilanswer
 

kaari a écrit :


 
Comment tu teste ?
Est-ce que tu lance avec "docker run -it <image> /bin/bash" pour voir si ton fichier est la ?
Quelles sont les permissions du fichier s'il est bien la ?
 
 
Il n'y a pas de raison que ton COPY config/ ne fonctionne pas.


 
COPY copie bien /config dans le conteneur, lors de docker build il y a pas de soucis :)  
et quand tu fais docker run -it <image> /bin/bash, tu ne fais que tester si config.txt est bien présent dans le conteneur.  
Or quand je fais:

docker run -it -v /chemin/vers/config/sur/host:/config <image>

et que je vérifie si config.txt est bien dans /chemin/vers/config/sur/host/, le fichier est absent.
 
EDIT: Syntaxe
 


Message édité par frenchieisverige le 11-12-2019 à 12:59:47

---------------
[TU]: Linux Mint | NAS Homemade | Noyau Linux | OpenMediaVault | Windows 11
n°1441550
the_big_po​ulet
Flying chicken
Posté le 11-12-2019 à 13:09:35  profilanswer
 

Ah mais attends tu veux faire un mount a l'envers en fait. Tu voudrais que le fichier dans ton container soit dispo sur le Host?
C'est l'inverse qu'il faut faire comme je disais.
Juste faire le mkdir dans le dockerfile et ensuite monter le patch du Host et tu met le fichier sur le Host.
Et la il sera dispo dans le container.

n°1441554
frenchieis​verige
Nej, men HEJSAN!
Posté le 11-12-2019 à 15:12:59  profilanswer
 

the_big_poulet a écrit :

Ah mais attends tu veux faire un mount a l'envers en fait. Tu voudrais que le fichier dans ton container soit dispo sur le Host?
C'est l'inverse qu'il faut faire comme je disais.
Juste faire le mkdir dans le dockerfile et ensuite monter le patch du Host et tu met le fichier sur le Host.
Et la il sera dispo dans le container.


 
Oui, à l'éxecution du containeur.
Pas contre, ce que tu me racontes après [:moonblood8:9] Rien compris :D  


---------------
[TU]: Linux Mint | NAS Homemade | Noyau Linux | OpenMediaVault | Windows 11
n°1441555
the_big_po​ulet
Flying chicken
Posté le 11-12-2019 à 15:29:22  profilanswer
 

le volumes dans docker en gros c'est comme un mount linux.
Quand tu montes le répertoire distant X dans un répertoire local Y tu ne vois plus QUE le contenu du répertoire X et plus ce qu'il y avait dans Y avant.
Tu récupères le contenu de Y lorsque tu démontes le répertoire.
 
Donc dans ton cas X est le répertoire sur ton host et Y le répertoire dans ton container.
Et toi en fait tu voudrais monter Y dans X ce qui est impossible.
 
Donc garde tout comme tu fais, démarre ton container.
Tu te connectes dessus en bash et tu fais un

ls /config


Tu ne verras rien.
Ensuite sur ton host tu met un fichier dans le répertoire que tu as lié a ton container et tu retournes faire le  

ls /config


Dans ton container.
 
tl;dr
en gros qd tu démarres ton container il remplace le contenu de /config par le contenu de /chemin/vers/config/sur/host


Message édité par the_big_poulet le 11-12-2019 à 15:30:40
n°1441563
frenchieis​verige
Nej, men HEJSAN!
Posté le 11-12-2019 à 18:52:26  profilanswer
 

Capiche :jap:
Par contre pas moyen de dire à docker que si le fichier existe dans le containeur et pas sur le host de copier ce fichier de config ?


---------------
[TU]: Linux Mint | NAS Homemade | Noyau Linux | OpenMediaVault | Windows 11
n°1441566
sined
Posté le 11-12-2019 à 19:27:32  profilanswer
 

frenchieisverige a écrit :

Capiche :jap:
Par contre pas moyen de dire à docker que si le fichier existe dans le containeur et pas sur le host de copier ce fichier de config ?


Je suis newb en docker, mais je ne vois pas pourquoi tu veux mettre un truc du conteneur sur le host au run mais pas tout le temps....
Le répertoire du host peut être vu par plusieurs conteneurs, difficile de voir où est ta référence de fichier. :pt1cable:  
 
Tu voulais faire quoi fonctionnellement ?
Soit c'est un fichier qui ne change pas et tu le mets dans le conteneur au build.
soit ca change dans le temps et tu le persistes en le mettant sur ton host et tu publies la nouvelle version sur ton host.


---------------
c'est un croque-mort qui rentre dans un bar et là le patron lui dit "Je vous sers une bière ?".
n°1441569
kaari
Fuck Yeah !
Posté le 11-12-2019 à 22:31:59  profilanswer
 

frenchieisverige a écrit :

Capiche :jap:
Par contre pas moyen de dire à docker que si le fichier existe dans le containeur et pas sur le host de copier ce fichier de config ?


Je comprends pas trop ce que tu essaye de faire en fait...
Pour faire simple, ce qui est immutable est dans ton image, ce qui ne l'est pas est dans un volume ou un bind mount.
 
Si tu veux initialiser des fichiers s'ils ne sont pas present lors du boot de l'instance (container), libre à toi de le faire, mais la notion de "si le fichier existe dans le container", ton image est immutable, ton fichier sera toujours là.
 
Btw, appliquer une config sur un container (/une application) on fait generalement ça avec des variables d'environment.

Message cité 1 fois
Message édité par kaari le 11-12-2019 à 22:35:12

---------------
Mon topic ventes ;)
n°1441595
frenchieis​verige
Nej, men HEJSAN!
Posté le 12-12-2019 à 12:26:22  profilanswer
 

sined a écrit :


Je suis newb en docker, mais je ne vois pas pourquoi tu veux mettre un truc du conteneur sur le host au run mais pas tout le temps....
Le répertoire du host peut être vu par plusieurs conteneurs, difficile de voir où est ta référence de fichier. :pt1cable:  
 
Tu voulais faire quoi fonctionnellement ?
Soit c'est un fichier qui ne change pas et tu le mets dans le conteneur au build.
soit ca change dans le temps et tu le persistes en le mettant sur ton host et tu publies la nouvelle version sur ton host.


 
C'est ça que je faire avec une subtilité en plus (si possible): Si le fichier n'est pas présent sur le host, mais dans le conteneur, Docker doit le copier.  
Cette idée m'est venu lors de la première mise en route, le fichier de config dans /config n'existe pas sur le host et l'utilisateur doit le créer manuellement. Un petit fichier de config "type" aurait été sympa.
Mais je me rends compte que ce n'est pas possible de résoudre ce problème avec Docker. Je ferai une méthode init() dans mon script qui se chargera de cette tâche.
 

kaari a écrit :


Je comprends pas trop ce que tu essaye de faire en fait...
Pour faire simple, ce qui est immutable est dans ton image, ce qui ne l'est pas est dans un volume ou un bind mount.
 
Si tu veux initialiser des fichiers s'ils ne sont pas present lors du boot de l'instance (container), libre à toi de le faire, mais la notion de "si le fichier existe dans le container", ton image est immutable, ton fichier sera toujours là.
 
Btw, appliquer une config sur un container (/une application) on fait generalement ça avec des variables d'environment.


 
Oui, j'ai bien mon taux de rafraîchissement (update_rate) en variable d'environnement. Ce fichier de config, qui est lu périodiquement en fonction du taux de rafraîchissement, je le vois plus comme une entrée pour l'utilisateur.
Plus tard, je ferai un petite interface web.  
 


---------------
[TU]: Linux Mint | NAS Homemade | Noyau Linux | OpenMediaVault | Windows 11
n°1441597
e_esprit
Posté le 12-12-2019 à 12:36:23  profilanswer
 

C'est possibel de fonctionner comme tu veux mais en utilisant un VRAI volume (et pas un bind mount d'un répertoire).
 
En effet, quand tu utilises un vrai volume, Docker sait si le volume est vierge ou pas. Si oui, et qu'il y a des choses dans l'image du conteneur à l'endroit ou il est censé monter le volume, alors il copie ce qui s'y trouve.
 
Par contre par la suite, le volume sera récupéré, et non vierge, donc même si le fichier change dans l'image, il ne sera pas modifié dans le volume, la copie ne se fait vraiment qu'à la création du volume.


---------------
Ce n'est point ma façon de penser qui a fait mon malheur, c'est celle des autres.
n°1441598
samuel14
Posté le 12-12-2019 à 13:22:54  profilanswer
 

Celos a écrit :

Certains ont réussi à se faire une instance cozy cloud https://cozy.io/fr/ sous docker ?


Ça m'intéresse aussi

n°1441601
frenchieis​verige
Nej, men HEJSAN!
Posté le 12-12-2019 à 16:53:26  profilanswer
 

e_esprit a écrit :

C'est possibel de fonctionner comme tu veux mais en utilisant un VRAI volume (et pas un bind mount d'un répertoire).
 
En effet, quand tu utilises un vrai volume, Docker sait si le volume est vierge ou pas. Si oui, et qu'il y a des choses dans l'image du conteneur à l'endroit ou il est censé monter le volume, alors il copie ce qui s'y trouve.
 
Par contre par la suite, le volume sera récupéré, et non vierge, donc même si le fichier change dans l'image, il ne sera pas modifié dans le volume, la copie ne se fait vraiment qu'à la création du volume.


Je m'en vais lire la doc, merci pour l'info :jap:

Celos a écrit :

Certains ont réussi à se faire une instance cozy cloud https://cozy.io/fr/ sous docker ?


samuel14 a écrit :


Ça m'intéresse aussi


En lisant la page de l'auto-hébergement, il ne sera pas possible de faire tourner Cozy seulement dans un conteneur, mais dans une multitude de conteneurs: un pour CouchDB, un pour pour le Cozy Stack, un pour le reverse-proxy et un pour LetsEncrypt. Docker compose peut aider à orchestrer tout ce petit monde, mais pas évident au premier abord.
 


---------------
[TU]: Linux Mint | NAS Homemade | Noyau Linux | OpenMediaVault | Windows 11
n°1441651
frenchieis​verige
Nej, men HEJSAN!
Posté le 13-12-2019 à 16:31:14  profilanswer
 

frenchieisverige a écrit :


Je m'en vais lire la doc, merci pour l'info :jap:


 
Après lecture, ce n'est pas possible de résoudre mon problème avec un "vrai" volume, ce dernier pouvant que être peupler par le container (et non depuis un host).
Je vais donc modifier mon code pour qu'il gère cette fonctionnalité, et me contentera d'un bind mounts.
 
Merci de votre aide en tout cas :jap:
 
:hello:


---------------
[TU]: Linux Mint | NAS Homemade | Noyau Linux | OpenMediaVault | Windows 11
n°1441652
e_esprit
Posté le 13-12-2019 à 16:33:09  profilanswer
 

Après je ne sais pas quel est ton besoin exact pour vouloir le modifier depuis l'hôte, mais ce n'est pas une bonne pratique ;)


---------------
Ce n'est point ma façon de penser qui a fait mon malheur, c'est celle des autres.
n°1441677
Celos
Posté le 13-12-2019 à 21:20:42  profilanswer
 

frenchieisverige a écrit :


Je m'en vais lire la doc, merci pour l'info :jap:


 
 
 

frenchieisverige a écrit :


En lisant la page de l'auto-hébergement, il ne sera pas possible de faire tourner Cozy seulement dans un conteneur, mais dans une multitude de conteneurs: un pour CouchDB, un pour pour le Cozy Stack, un pour le reverse-proxy et un pour LetsEncrypt. Docker compose peut aider à orchestrer tout ce petit monde, mais pas évident au premier abord.
 


 
 
J’ai plus ou moins réussi avec Traefik, et Easy-cosy, dispo ici :
 
https://github.com/vsellier/easy-cozy

n°1441697
frenchieis​verige
Nej, men HEJSAN!
Posté le 14-12-2019 à 13:41:42  profilanswer
 

e_esprit a écrit :

Après je ne sais pas quel est ton besoin exact pour vouloir le modifier depuis l'hôte, mais ce n'est pas une bonne pratique ;)

 

Quel est donc le moyen le plus simple ou l'utilisateur peut entrer une liste ?


---------------
[TU]: Linux Mint | NAS Homemade | Noyau Linux | OpenMediaVault | Windows 11
n°1441726
e_esprit
Posté le 14-12-2019 à 22:14:45  profilanswer
 

Une variable d'env avec du json dedans ?


---------------
Ce n'est point ma façon de penser qui a fait mon malheur, c'est celle des autres.
n°1442029
SnowBear
Posté le 20-12-2019 à 10:30:41  profilanswer
 

Plop tout le monde,
 
J'ai un petit soucis avec un de mes docker-compose.yml.
 
L'idée est de fournir des images docker NodeJS pour nos projets à mes collègues en intégrant également la base PostgreSQL afin qu'ils n'aient pas besoin d'avoir tous les outils sur leur machine.
 
 
Je bloque sur le problème suivant :

ERROR: connect ECONNREFUSED 172.18.0.2:5423


 
Mon instance NodeJS n'arrive pas à se connecter sur mon instance PostgreSQL.
 
 
Mon fichier :

version: "2"
 
services:
  wog:
    build: .
    command: >
      bash -c "yarn install &&
      ./node_modules/.bin/gulp compile:yml &&
      ./node_modules/.bin/sequelize db:migrate &&
      ./node_modules/.bin/sequelize db:seed:all &&
      ./node_modules/.bin/nodemon"
    volumes:
      - ../:/usr/app/
    ports:
      - "3666:3000"
    depends_on:
      - db
    environment:
      DEBUG: express:*
      NODE_ENV: docker
  db:
    image: postgres
    restart: always
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
    ports:
      - 5423:5432


 
Depuis mon client Postgres je peux me connecter sur `localhost:5423` sans problème mais pas sur `172.18.0.2:5423`. J'ai une autre image PostgreSQL qui tourne sur `172.17.0.3:5432` que je peux atteindre sans problème.
 
Mon serveur fonctionnel est rattaché à l'interface `bridge` alors que mon nouveau serveur (le nom fonctionnel) étant rattaché à l'interface `docker_default`. Je suppose que mon soucis vient de là ? Si tel est le cas comment indiqué dans mon fichier compose d'utiliser une autre interface ?
 
 
Merci  :jap:  

n°1442030
e_esprit
Posté le 20-12-2019 à 10:42:02  profilanswer
 

Parce que c'est le port 5432 qu'il faut que tu utilises, que ce soit en interne à ton conteneur db (localhost), où depuis le réseau interne de Docker (donc depuis ton conteneur wog).

 

Tu n'a pas besoin d'exposer le port à l'extérieur (ton ports : - 5423:5432) pour avoir la connectivité wog <=> db, c'est uniquement pour rendre ton conteneur accessible de l'extérieur du réseau Docker, en l'exposant sur ton hote (l'IP de ta machine à toi).


Message édité par e_esprit le 20-12-2019 à 11:00:58

---------------
Ce n'est point ma façon de penser qui a fait mon malheur, c'est celle des autres.
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  ..  21  22  23  ..  50  51  52  53  54  55

Aller à :
Ajouter une réponse
 

Sujets relatifs
Docker deux fenetres sous KDE ?[Window Maker] Comment docker 2x la même appli ?
Plus de sujets relatifs à : [TOPICUNIK] Docker


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)