Ich habe Docker Host und drinnen habe ich einen Container.
Der Docker-Host bindet den Port nur an die IPv6-Schnittstelle, nicht an IPv4.
Dies ist die Ausgabe
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 -
Jetzt habe ich 40122 Port auf Host, um mit Port 22 auf Container zu verbinden.
Ich möchte SSH in diesen Container, aber ich kann nicht als einzige an IPv6 gebunden sein
Dies ist meine Docker-Version 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
Ich rannte mit 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
docker ps
wenn der Container ausgeführt wird.docker exec -ti 201bde6c839a /bin/bash
, sobald Sie in sind, die Ausgabe vonps aux
undnetstat -taln
Antworten:
Wie @ daniel-t im Kommentar hervorhebt : Bei github.com/docker/docker/issues/2174 geht es darum, die Bindung nur an IPv6 in anzuzeigen
netstat
, aber das ist kein Problem. In diesem Github heißt es:Mit anderen Worten, nur weil Sie es nur als IPv6 sehen, kann es weiterhin über IPv4 kommunizieren, es sei denn, Sie haben IPv6 so eingestellt, dass es nur mit der Einstellung net.ipv6.bindv6 nur an IPv6 bindet. Um klar zu sein, sollte net.ipv6.bindv6 nur 0 sein - Sie können es ausführen
sysctl net.ipv6.bindv6only
, um es zu überprüfen.quelle
Durch die Einstellung
net.ipv6.conf.all.forwarding=1
wird das Problem behoben.Dies kann auf einem Live-System mit erfolgen
sudo sysctl -w net.ipv6.conf.all.forwarding=1
quelle
sysctl net.ipv6.bindv6only=0
so eine Änderung dieser Konfiguration nicht geholfen.Standardmäßig verwendet Docker AF_INET6-Sockets, die sowohl für IPv4- als auch für IPv6-Verbindungen verwendet werden können. Dies führt dazu, dass netstat eine IPv6-Adresse für die Überwachungsadresse meldet.
Von RedHat https://access.redhat.com/solutions/3114021
quelle
Wenn Sie möchten, dass Ihre Container-Ports an Ihre IPv4-Adresse gebunden werden, gehen Sie einfach wie folgt vor:
funktioniert für mich auf Docker 1.9.1
quelle
Nach dem Deaktivieren von SELinux konnte ich auf den Docker-Container zugreifen
SELinux vorübergehend deaktivieren
#sudo setenforce 0
Meine Docker-Container liefen auf Centos-7
quelle