Utilisation d'Ubuntu Linux avec docker installé. Pas de VM.
J'ai construit une image docker avec une application vuejs. Pour activer le rechargement à chaud, je démarre le conteneur Docker avec:
docker run -it -p 8081:8080 -e "HOST=0.0.0.0" -v ${PWD}:/app/ -v /app/node_modules --name my-frontend my-frontend-image
Il démarre correctement et je peux y accéder à partir de mon navigateur hôte localhost:8081
. Mais lorsque j'apporte des modifications aux fichiers source et que j'enregistre ces modifications, elles ne sont pas reflétées dans mon navigateur avant d'appuyer sur F5 (le rechargement à chaud ne fonctionne pas).
Quelques détails ci-dessous:
package.json
"scripts": {
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
"start": "npm run dev",
build / webpack.dev.conf.js
devServer: {
clientLogLevel: 'warning',
...
hot: true,
...
watchOptions: {
//poll: config.dev.poll,
//aggregateTimeout: 500, // delay before reloading
poll: 100 // enable polling since fsevents are not supported in docker
}
J'ai essayé de modifier les watchOptions mais cela n'a aucun effet.
ÉDITER:
Sur la base de la réponse ci-dessous, j'ai essayé de passer: en CHOKIDAR_USEPOLLING=true
tant que variable d'environnement à Docker Run:
docker run -it -p 8081:8080 -e "HOST=0.0.0.0" -e "CHOKIDAR_USEPOLLING=true" -v ${PWD}:/app/ -v /app/node_modules --name my-frontend my-frontend-image
Mais cela n'a pas d'effet - toujours pas en mesure de recharger à chaud mes modifications. Également dans le lien fourni, il est dit:
Mise à jour / clarification: ce problème se produit uniquement lors de l'exécution de votre moteur Docker dans une machine virtuelle. Si vous êtes sous Linux pour Docker et pour le codage, vous n'avez pas ce problème.
Ne pensez donc pas que la réponse s'applique à ma configuration - j'utilise Ubuntu Linux sur ma machine sur laquelle j'ai installé docker. Donc, aucune configuration de machine virtuelle.
Une autre mise à jour - basée sur le commentaire ci-dessous sur la modification du mappage de port:
# Hot reload works!
docker run -it -p 8080:8080 -e "HOST=0.0.0.0" -v ${PWD}:/app/ -v /app/node_modules --name my-frontend my-frontend-image
# Hot reload fails!
#docker run -it -p 8081:8080 -e "HOST=0.0.0.0" -v ${PWD}:/app/ -v /app/node_modules --name my-frontend my-frontend-image
Donc, si je transfère la carte au 8080:8080
lieu de 8081:8080
recharger à chaud, ça marche! Notez que l'application apparaît dans les deux cas lorsque j'y accède sur mon navigateur hôte localhost
sur les ports mentionnés ci-dessus. C'est juste que le rechargement à chaud ne fonctionne que lorsque je mappe l'application sur 8080 sur mon hôte.
Mais pourquoi??
Maintenant, si je le fais:
PORT='8081'
docker run -it -p "${PORT}:${PORT}" -e "HOST=0.0.0.0" -e "PORT=${PORT}" -v ${PWD}:/app/ -v /app/node_modules --name my-frontend my-frontend-image
Le rechargement à chaud fonctionne bien sûr. Mais je ne sais toujours pas pourquoi je ne peux pas mapper le port de conteneur interne 8080 à 8081 en externe sur l'hôte.
Btw; Je ne vois pas du tout le problème si j'utilise à la vue-cli-service serve
place - tout fonctionne hors de la boîte .
-p 8080:8080 -p 8081:8081