Hoe toegang krijgen tot de webserver van Docker-container vanaf de host

Ik gebruik boot2docker 1.3.1.

Ik heb een Docker-container waarop een webserver draait via uwsgi --http :8080.

Als ik aan de container koppel, kan ik door de website bladeren met lynx http://127.0.0.1:8080zodat ik weet dat de server werkt.

Ik heb mijn container uitgevoerd met:

$ docker run -itP --expose 8080 uwsgi_app:0.2

Het heeft de volgende details:

$ 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

Ik dacht dat ik vanaf mijn host toegang tot die website kon krijgen door naar http://172.17.0.107:49159te gaan.

Dit werkt niet. Ik zie alleen ‘verbinden…’ in Chrome, maar ik kom nergens.

Wat doe ik verkeerd?


Antwoord 1, autoriteit 100%

Uitbreiding van Anentropic’santwoord : boot2dockeris de oude app voor Mac en Windows, docker-machineis de nieuwe.

Vermeld eerst uw machines:

$ docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM
default   *        virtualbox   Running   tcp://192.168.99.100:2376

Selecteer vervolgens een van de machines (de standaardcomputer heet default) en:

$ docker-machine ip default
192.168.99.100

Antwoord 2, autoriteit 38%

Ok, stom van me, ik heb het antwoord gevonden in de documenten voor boot2docker
https://docs.docker.com/installation/mac/#container-port-redirection

Ik moest het ip-adres van de boot2docker vm gebruiken in plaats van het ip van de container, d.w.z.

$ boot2docker ip
192.168.59.103

en ik kan door mijn site bladeren vanaf de host op http://192.168.59.103:49159/

Ik hoefde geen routetoe te voegen aan de host


Antwoord 3, autoriteit 15%

Om het IP-adres van uw container te vinden, heeft u GEEN extra installatiesnodig:

docker inspect <container>

Dit levert een schat aan informatie op. grephet voor het IPAddress.


Antwoord 4, autoriteit 5%

Je zou de boot2docker-poorttoewijzingsoptie -L kunnen gebruiken, zoals hier.

Dus in jouw geval zou het zijn

boot2docker ssh -L 0.0.0.0:8080:localhost:8080

en dan

docker run -it -p 8080:8080 uwsgi_app:0.2

Op die manier hoeft u het IP-adres van boot2docker niet te gebruiken: u kunt localhost of uw eigen IP-adres gebruiken (en uw docker-container is van buitenaf toegankelijk).


5

had hetzelfde probleem en in mijn geval gebruikte ik AWS EC2-instantie. Ik probeerde met de Container IP die niet werkte. Toen gebruikte ik het eigenlijke publieke IP van de AWS-host als het IP, dat werkte.

Other episodes