ng ne servent pas de travail dans le conteneur Docker
J'ai cette Docker Composer de configuration où il suffit de créer un NodeJS conteneur et installer Angulaire de la CLI à l'intérieur.
Après un docker-compose up -d
, je suis en mesure de SSH à l'intérieur du conteneur avec docker-compose run node bash
. ng new
fonctionne parfaitement mais ng serve
ne semble pas fonctionner. Il est lancé correctement, pas d'erreur dans la console. Mais, si je visite localhost
(ad je l'ai associé le port 4200 à 80), rien ne se charge.
Suis-je raté quelque chose?
- Pouvez-vous poster le Dockerfile dans votre ./.menu fixe/node/ dossier?
- Jamais l'esprit, vu sur github.
Vous devez vous connecter pour publier un commentaire.
Dans votre Dockerfile qui vous manque la Exposer ligne tels que:
EXPOSE 4200
Essayer de le placer avant votre dernière commande EXÉCUTER dans le menu fixe de fichier.
Cette ligne expose le port dans le conteneur lui-même (4200 dans ce cas) la cartographie de composer des œuvres (80:4200).
Composer tout simplement ceci: avant 80 à partir de l'hôte à 4200 dans le conteneur. Mais il ne sait pas ou de soins si la 4200 est en fait d'être écouté. L'Exposer dans le dockerfile permet de s'assurer lorsque l'image est construite, pour exposer ce port pour le fonctionnement futur des conteneurs, de sorte que votre ng servir peut l'écouter.
Résolution
Pour obtenir ce que vous voulez avec
docker-compose run
, utilisezpublish
pour publier les ports. Commerun
ne pas utiliser les mappages de votredocker-compose.yml
, il les ignore. Afin de l'utiliser comme ceci:docker-compose run --publish 80:4200 node bash
Alors créer l'angle d'application et démarrez-le, comme vous le faisiez.
Exemple De Test De Référence Pour L'Avenir
cd tmp
(en tout ou en écriture du dossier)ng new myProject
cd myProject
ng serve --host 0.0.0.0
(--host 0.0.0.0 à l'écoute de toutes les interfaces à partir du conteneur)Puis dans votre navigateur, allez à la
localhost
et vous devriez voir l'angulaire de la page d'accueil maintenant que le port4200
est publié et lié à l'hôte port80
par le biais de la commande publier comme je l'ai montré ci-dessus.Chaque fois que vous avez la redirection de port, si vous ouvrez un nouveau terminal en gardant l'autre terminal où vous avez exécuté l'origine
run command
et exécuterdocker ps
vous verrez cela dans les Ports de la colonne:0.0.0.0:80->4200/tcp
ce qui signifie que votre hôte sur le port 80 est de transférer à votre conteneur dans le port 4200 avec succès.Si vous voyez quelque chose comme
4200/tcp
et pas le->
partie, qui signifie il n'y a pas de mappages de ports publié.docker-compose
etangular-cli
, et a dû utiliser cettecommand
ligne pour que cela fonctionne:command: "npm run -- ng serve --host 0.0.0.0 --disable-host-check"
. Le--host
partie a été analysée parnpm run
plutôt queng serve
sans--
.essayez d'exécuter
ng servir
avec l'hôte spécifié (qui est définie à 'localhost' par défaut):Mise à JOUR
Attention, caurrently (@angulaire/cli@7) l'option est
--host
:À l'aide de
ng serve --host 0.0.0.0
a toujours travaillé pour moi.La raison de ce qui est essentiel, c'est que sans elle, l'angle n'est à l'écoute sur l'interface localhost à l'intérieur du conteneur - de sorte que même avec le panneau de mappage de port, les connexions à partir de l'extérieur du récipient, ne sont pas reçus.
Mais si vous ajoutez le paramètre
--host 0.0.0.0
puis l'angle de processus est à l'écoute sur toutes les interfaces, et le docker du port de cartographie permettra des connexions à partir de l'extérieur du conteneur pour l'atteindre.Donc, en résumé:
EXPOSE 4200
ligne dans le DockerfileCMD ["ng","serve","--host", "0.0.0.0"]
docker run
docker-compose up
, qui va ramasser les mappages de port à partir du menu fixe-composer.fichier yml.ce que vous faites est tout simplement l'installation de l'angle, vous devez avoir
CMD ["npm start"] or CMD ["ng serve"]
à la fin de dockerfile c'est le point d'entrée pour le conteneur qui docker s'exécute lorsque vous démarrez le conteneur, et seulement alors, le mécanisme national de prévention serveur va commencer.ng serve -H 0.0.0.0 --port <yourportnumber>
fera le ngserve à exécuter surlocalhost:<yourportnumber>
après vous pouvez lier le conteneur de port le numéro de port localng serve
avec 1000 sondage propriété angulaire-cli.json (pour le fichier de détection de changement)