web-dev-qa-db-fra.com

Comment accéder au serveur Web du conteneur Docker à partir de l'hôte

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?

48
Anentropic

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

34
Anentropic

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
90
HankCa

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.

9
JellicleCat

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).

4
Magic Wand

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é.

1
Siva Dorai

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 -pport 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.

1
Jonathan Stray

[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. 

1
Bryan

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

0
Atul