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"]
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.
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.
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