web-dev-qa-db-fra.com

Faire en sorte que le menu fixe utilise IPv4 pour la liaison de port

J'ai le docker Host et à l'intérieur, j'ai un conteneur.

Le menu fixe hôte lie le port uniquement sur l'interface IPv6, pas sur IPv4.

C'est la sortie

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:55082           0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      -
tcp6       0      0 :::80                   :::*                    LISTEN      -
tcp6       0      0 :::22                   :::*                    LISTEN      -
tcp6       0      0 :::40280                :::*                    LISTEN      -
tcp6       0      0 :::5432                 :::*                    LISTEN      -
tcp6       0      0 :::40122                :::*                    LISTEN      -
tcp6       0      0 :::36378                :::*                    LISTEN      -
tcp6       0      0 :::40543                :::*                    LISTEN      -
tcp6       0      0 :::111                  :::*                    LISTEN      -

Maintenant, j'ai le port 40122 sur l'hôte pour établir une liaison avec le port 22 sur le conteneur.

Je veux SSH dans ce conteneur, mais je ne suis pas en mesure de le lier uniquement à IPv6

Ceci est ma version de docker Docker version 1.5.0, build a8a31ef

docker ps

201bde6c839a        myapp:latest   "supervisord -n"    3 weeks ago         Up 2 hours          0.0.0.0:40122->22/tcp, 0.0.0.0:40280->80/tcp, 0.0.0.0:40543->443/tcp   myapp

J'ai couru en utilisant docker run -d -P -p 40122:22

netstat -tlna

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:3031          0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
tcp6       0      0 :::6379                 :::*                    LISTEN

ps aux

root         1  0.0  0.8  52440 16668 ?        Ss   00:53   0:03 /usr/bin/python /usr/bin/supervisord -n
root        49  0.0  0.1  17980  3048 ?        S    01:32   0:00 bash
root        64  0.0  0.1  46632  2712 ?        S    01:32   0:00 su -l vagrant
vagrant     65  0.0  0.1  21308  3760 ?        S    01:32   0:00 -su
root       288  0.0  0.1  17980  3088 ?        S    02:01   0:00 bash
root       304  0.0  0.1  46632  2720 ?        S    02:01   0:00 su -l vagrant
vagrant    305  0.0  0.1  21304  3804 ?        S    02:01   0:00 -su
vagrant    308  0.0  3.7 429616 75840 ?        Sl+  02:01   0:05 python ./manage.py Shell_plus
root       654  0.0  0.4  47596  9848 ?        S    03:12   0:01 /usr/local/bin/uwsgi --die-on-term --ini /var/www/conf/uwsgi.ini
root       655  0.0  0.3  90280  7732 ?        S    03:12   0:00 nginx: master process /usr/sbin/nginx
www-data   656  0.0  0.1  90600  3624 ?        S    03:12   0:00 nginx: worker process
www-data   657  0.0  0.1  90600  3624 ?        S    03:12   0:00 nginx: worker process
www-data   658  0.0  0.1  90600  3624 ?        S    03:12   0:00 nginx: worker process
www-data   659  0.0  0.2  90940  4500 ?        S    03:12   0:00 nginx: worker process
root       660  0.0  0.2  61372  5332 ?        S    03:12   0:00 /usr/sbin/sshd -D
root       669  0.0  0.4  37004  8892 ?        Sl   03:12   0:01 redis-server *:6379
root       856  8.0  2.8 388720 57792 ?        Sl   04:07   0:18 /usr/local/bin/uwsgi --die-on-term --ini /var/www/conf/uwsgi.ini
root       857  8.0  2.8 388720 57792 ?        Sl   04:07   0:18 /usr/local/bin/uwsgi --die-on-term --ini /var/www/conf/uwsgi.ini
root       858  8.0  2.8 388720 57792 ?        Sl   04:07   0:18 /usr/local/bin/uwsgi --die-on-term --ini /var/www/conf/uwsgi.ini
root       859  8.0  2.8 388720 57792 ?        Sl   04:07   0:18 /usr/local/bin/uwsgi --die-on-term --ini /var/www/conf/uwsgi.ini
vagrant    889  0.0  0.1  18692  2508 ?        R+   04:11   0:00 ps aux
69
user3214546

Comme @ daniel-t le souligne dans le commentaire: github.com/docker/docker/issues/2174 vise à afficher la liaison uniquement à IPv6 dans netstat, mais ce n'est pas un problème . Comme le dit le github:

Lors de la configuration du proxy, Docker demande l'adresse de bouclage '127.0.0.1', Linux se rend compte qu'il s'agit d'une adresse existant dans IPv6 (sous la forme :: 0) et ouverte sur les deux (mais il s'agit officiellement d'un socket IPv6). Lorsque vous exécutez netstat, il voit cela et vous dit que c'est un IPv6 - mais il écoute toujours sur IPv4. Si vous avez un peu joué avec vos paramètres, vous avez peut-être désactivé cette astuce que fait Linux - en définissant net.ipv6.bindv6only = 1.

En d'autres termes, juste parce que vous le voyez en tant qu'IPv6 uniquement, il est toujours capable de communiquer sur IPv4, sauf si IPv6 est configuré pour n'être lié que sur IPv6 avec le paramètre net.ipv6.bindv6only. Pour être clair, net.ipv6.bindv6only doit être 0 - vous pouvez exécuter sysctl net.ipv6.bindv6only vérifier.

47
Michael

Définir net.ipv6.conf.all.forwarding = 1 résoudra le problème. travaille pour moi

5
LuciferJack

Si vous souhaitez que vos ports de conteneur se lient à votre adresse ipv4, il suffit de:

  • trouver le fichier de paramètres
    • / etc/sysconfig/docker-network sous RedHat
    • / etc/default/docker-network sous Debian
  • éditer les paramètres réseau
    • add DOCKER_NETWORK_OPTIONS = -ip = xx.xx.xx.xx
    • xx.xx.xx.xx étant votre véritable ipv4 (et non 0.0.0.0)
  • redémarrer docker deamon

travaille pour moi sur docker 1.9.1

0
Sylvain