Je cours sous boot2docker 1.3.1.
J'ai un conteneur Docker exécutant un serveur Web via uwsgi --http :8080
.
Si je me connecte au conteneur, je peux naviguer sur le site Web à l'aide de lynx http://127.0.0.1:8080
afin de savoir si le serveur fonctionne.
J'ai couru mon conteneur avec:
$ docker run -itP --expose 8080 uwsgi_app:0.2
Il a les détails suivants:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5248ad86596d uwsgi_app:0.2 "bash" 11 minutes ago Up 11 minutes 0.0.0.0:49159->8080/tcp cocky_hypatia
$ docker inspect --format '{{ .NetworkSettings.IPAddress }}' 5248ad86596d
172.17.0.107
Je pensais pouvoir accéder à ce site Web à partir de mon hôte en allant à http://172.17.0.107:49159
.
Cela ne fonctionne pas. Je viens de voir «se connecter ...» dans Chrome, pour arriver nulle part.
Qu'est-ce que je fais mal?
Ok, stupide moi, j'ai trouvé la réponse dans la documentation pour boot2docker https://docs.docker.com/installation/mac/#container-port-redirection
J'avais besoin d'utiliser l'adresse IP de boot2docker vm, plutôt que l'adresse IP du conteneur, c'est-à-dire.
$ boot2docker ip
192.168.59.103
et je peux naviguer sur mon site depuis l'hôte à l'adresse http://192.168.59.103:49159/
Je n'ai pas eu besoin d'ajouter route
sur l'hôte
Extension de - Anentropicanswer : boot2docker
est l'ancienne application pour Mac et Windows, docker-machine
est la nouvelle.
Tout d'abord, listez vos machines:
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
default * virtualbox Running tcp://192.168.99.100:2376
Puis sélectionnez l’une des machines (celle par défaut est appelée default
) et:
$ docker-machine ip default
192.168.99.100
Pour trouver l'adresse IP de votre conteneur, vous devez avoir besoin de AUCUNE installation supplémentaire :
docker inspect <container>
Cela fournit une mine d'informations. grep
pour l'adresse IP.
Vous pouvez utiliser l'option de mappage de port de boot2docker -L, comme décrit ici .
Donc, dans votre cas, ce serait
boot2docker ssh -L 0.0.0.0:8080:localhost:8080
et alors
docker run -it -p 8080:8080 uwsgi_app:0.2
Ainsi, vous n'avez pas besoin d'utiliser l'adresse IP de boot2docker: vous pouvez utiliser localhost ou votre propre adresse IP (et votre conteneur de menu fixe est accessible de l'extérieur).
J'avais le même problème et dans mon cas, j'utilisais l'instance AWS EC2. J'essayais avec le conteneur IP qui ne fonctionnait pas. Ensuite, j'ai utilisé l'adresse IP publique réelle de l'hôte AWS en tant qu'IP, ce qui a fonctionné.
Boot2docker est obsolète, mais vous pouvez toujours rencontrer ce problème sur Docker pour Windows ou Mac, même si le même conteneur fonctionne sous Linux. Un symptôme est que le fait d'essayer d'accéder à une page sur le serveur à l'intérieur du conteneur donne l'erreur "n'a envoyé aucune donnée" par opposition à "impossible de se connecter".
Si tel est le cas, il se peut que, sous Win/Mac, l'hôte container ait sa propre adresse IP ; Essayez d’exécuter Django sur IP 0.0.0.0, ce qui signifie d’accepter les connexions de toutes les adresses IP, comme ceci:
python manage.py runserver 0.0.0.0:8000
Sinon, si vous devez vous assurer que le serveur ne répond qu'aux demandes locales (par exemple, à partir de votre proxy local tel que nginx, Apache ou gunicorn), vous pouvez utiliser l'adresse IP de l'hôte renvoyée par hostname -i
.
Assurez-vous également que vous utilisez correctement l'option de redirection -p
port dans la commande docker run
.
En supposant que tout va bien, vous devriez pouvoir accéder à votre serveur à l'adresse http: // localhost dans un navigateur exécuté sur la machine hôte.
[EDIT: la version originale ignorait le -P en question]
Si vous voulez accéder aux conteneurs sans avoir à «publier» le port (qui change de numéro) Il y a une bonne exécution ici .
La clé est cette ligne:
Sudo route -n add 172.17.0.0/16 172.16.0.11
qui indique au Mac comment acheminer vers le réseau privé de la VirtualBox VM les conteneurs Docker sont activés.
Comment résoudre le problème de l'application d'hébergement sur le navigateur de l'hôte local
Pour ce lancement le conteneur avec la commande ci-dessous, dans mon cas c'était:
[root@centoslab3 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1b81d8a0e3e1 centos:baseweb "/bin/bash" 8 minutes ago Exited (0) 24 seconds ago webtest
[root@centoslab3 ~]# docker run --name=atul -v /root/dockertest:/var/www/html -i -t -p 5000:8000 centos:baseweb /bin/bash
Dans la configuration httpd:
[root@adb28b08c9ed /]# cd /etc/httpd/conf
[root@adb28b08c9ed conf]# ll
total 52
-rw-r--r--. 1 root root 34419 Sep 19 15:16 httpd.conf
éditez le fichier avec le port 8000 dans listner et mettez à jour l'adresse IP du conteneur et le port sous Nom du serveur.
Redémarrez le service httpd et vous avez terminé.
J'espère que cela t'aides