web-dev-qa-db-fra.com

Écoutez les modifications et rechargez le conteneur lors du changement de code - Docker-compose

J'utilise Docker-compose dans Visual Studio 2019 avec Docker pour Windows exécutant des conteneurs Linux. Je souhaite activer le rechargement à chaud pour l'application cliente angular.

J'ai modifié la commande npm exécutant l'application pour inclure un sondage comme:

"docker-start": "ng serve --Host 0.0.0.0 --port 4200 --proxy-config proxy-conf.json --poll 1"

et ajouté un volume dans docker-compose comme ceci:

volumes:
  - ./ClientApp:/app/

exposant également le port du webpack

ports:
  - 4200:4200
  - 49153:49153

le fichier docker-compose est à la racine du dépôt et l'application angular se trouve dans le dossier/ClientApp. Cela rend le lancement de l'application impossible GET\chaque fois que je navigue vers localhost: 4200. Si je commentez le mappage du volume, l'application commence à fonctionner mais pas le rechargement. J'aimerais qu'elle écoute les changements dans le code et met à jour le conteneur au besoin chaque fois que je change un code frontal.

Dockerfile entier:

FROM node:9.6.1

RUN mkdir -p /app
WORKDIR /app
EXPOSE 4200
EXPOSE 49153

ENV PATH /app/node_modules/.bin:$PATH

COPY . /app

RUN npm install --silent
RUN npm rebuild node-sass

CMD ["npm", "run", "docker-start"]
10
qubits

Vous pourriez être confronté à plusieurs problèmes ici, car Docker et Windows ne s'entendent pas bien malheureusement.

Le cannot GET\ l'erreur est indéniablement bizarre et ne devrait pas se produire. Vous voudrez peut-être d'abord vérifier que votre volume a été monté correctement et que toutes les données sont là après l'exécution du conteneur.

Si le répertoire de travail à l'intérieur de votre conteneur est vide (ce qui pourrait être le cas), vous pouvez essayer de vérifier les paramètres de votre docker, si les lecteurs requis sont partagés correctement.

S'ils le sont et que vous ne voyez toujours aucune donnée, vous souhaiterez peut-être réinitialiser vos informations d'identification. Cela vous oblige à fournir votre mot de passe Windows à Docker.

Docker Settings

La mauvaise nouvelle

La mauvaise nouvelle est que, apparemment, l'événement inotify (qui est utilisé pour détecter les modifications sur les volumes montés) ne fonctionne pas encore avec Docker sous Windows, selon Docker Docs . Vous voudrez peut-être suivre leurs recommandations sur la façon de contourner ce problème.

La bonne nouvelle

Heureusement, il existe de nombreux projets qui tentent de résoudre votre problème, tels que Go-Touch . Je ne l'ai pas vérifié moi-même, mais j'espère que vous en profiterez.

1
tcpgibbon

Utilisez nodemon pour redémarrer automatiquement le serveur de noeud lorsque le code est modifié. Avant cela, installez nodemon dans votre image docker et assurez-vous qu'il est présent.

Référez-vous à cette URL pour installer nodemon: https://www.npmjs.com/package/nodemon

puis changez votre CMD dans Dockerfile

CMD ["nodemon", "--exec", "npm", "run", "docker-start"]

Il s'agit de recharger votre application nodejs chaque fois que les codes sont modifiés

1
Prem