web-dev-qa-db-fra.com

La redirection du port Docker ne fonctionne pas

J'ai configuré le conteneur Docker pour accéder à mon conteneur Docker de machine à une autre machine en local.

Créez un conteneur sous la commande:

    docker run -it -d --name containerName -h www.myhost.net -v /var/www/html -p 7000:8000 --net mynetwork --ip 172.11.0.10 --privileged myimagename bash

Après avoir créé les détails d'un conteneur:

        CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES

        1e1e5e9b74b4        myimgaename         "bash"              21 minutes ago      Up 6 minutes        0.0.0.0:7000->8000/tcp   containername

Détails NetWork:

     "NetworkSettings": {
        "Bridge": "",
        "SandboxID": "fe357c54c816fff0f9d642037dc9a173be7f7e42a80776d006572f6a1395969e",
        "HairpinMode": false,
        "LinkLocalIPv6Address": "",
        "LinkLocalIPv6PrefixLen": 0,
        "Ports": {
            "8000/tcp": [
                {
                    "HostIp": "0.0.0.0",
                    "HostPort": "7000"
                }
            ]
        }

si j'accède à docker ipaddr (172.11.0.10) ou au nom d'hôte (www.myhost.net) dans mymachine (hostmachine), cela fonctionne

Mais si j'accède avec Port ne fonctionne pas: hostmachine ip: 192.168.1.1

  go to the browser  192.168.1.1:7000  hostmachine and locally connected anoter machine also.

Mais mes ports 7000 sont à l'écoute dans la machine hôte:

        # ps aux | grep 7000
        root     10437  0.0  0.2 194792 24572 pts/0    Sl+  12:33   0:00 docker-proxy -proto tcp -Host-ip 0.0.0.0 -Host-port 7000 -container-ip 172.11.0.10 -container-port 8000
        root     10941  0.0  0.0 118492  2324 pts/3    R+   12:44   0:00 grep --color=auto 7000

mise à jour 1:

      $ docker version
        Client:
         Version:      1.11.2
         API version:  1.23
         Go version:   go1.5.4
         Git commit:   b9f10c9
         Built:        Wed Jun  1 21:39:21 2016
         OS/Arch:      linux/AMD64

        Server:
         Version:      1.11.2
         API version:  1.23
         Go version:   go1.5.4
         Git commit:   b9f10c9
         Built:        Wed Jun  1 21:39:21 2016
         OS/Arch:      linux/AMD64

Suggérez-moi pourquoi je ne peux pas accéder à mon conteneur à une autre machine. Comment résoudre ce problème

11
Rajkumar .E

J'ai trouvé ce message, mais j'ai eu un autre problème et je suis sûr que les conseils suivants peuvent aider quelqu'un:

Liez votre app dans Docker à .0.0., pas à 127.0.0.1 adresse pour permettre à Docker d'atteindre l'application dans le conteneur.

19
DenisKolodin

Port 7000 sur l'hôte redirige vers le port 8000 dans le conteneur, mais est-ce que quelque chose écoute sur ce port dans le conteneur?

Votre docker run la commande est un peu bizarre: -it permet d'exécuter un conteneur de manière interactive avec un terminal connecté; -d est utilisé pour exécuter détaché, en arrière-plan; bash à la fin remplace tout ce que l'image configure comme commande de démarrage, c'est pourquoi je pense qu'il n'y a rien à écouter sur le port 8000.

Essayez d'exécuter le conteneur NGINX le plus simple avec ceci:

docker run -d -p 8081:80 nginx:Alpine

Et puis vérifiez que vous pouvez accéder à la page d'accueil:

curl http://localhost:8081

Si cela fonctionne, je regarderai comment vous exécutez votre image.

16
Elton Stoneman

Cela m'arrivait avec Docker pour Mac. Cliquer sur l'icône Docker, puis sur Restart a fait l'affaire.

1
Parris Varney

Réponse partielle:

Maintenant, j'ai résolu ce problème partiellement, alors que j'essaye sans bash dans créer un conteneur et changer mon port à 3000 (-p 3000: 80) cela a fonctionné pour moi.

Avant la commande:

     docker run -it -d --name containerName -h www.myhost.net -v /var/www/html -p 3000:80 --net mynetwork --ip 172.11.0.10 --privileged myimagename  bash

Après commande:

    docker run -it -d --name containerName -h www.myhost.net -v /var/www/html -p 3000:80 --net mynetwork --ip 172.11.0.10 --privileged myimagename

Ensuite,

exécuter le conteneur avec bin/bash

  docker exec -it containerName bin/bash

Maintenant, fonctionne localement une autre machine connectée.

 hostmachineip:3000 


I don't know docker have any port restrictions.But This solution works for me.
1
Rajkumar .E

Lorsque j'ai rencontré ce problème (avec un ensemble géré d'instances de docker-composer), j'ai constaté que la suppression du réseau qui docker-compose a résolu le problème:

docker-compose stop
# find the network related to my docker-compose setup
docker network ls
docker network rm NETWORKNAME
# let docker-compose recreate the network:
docker-compose up -d
0
dsummersl