Saya memiliki host buruh pelabuhan dan di dalamnya saya memiliki satu wadah.
Host buruh pelabuhan mengikat port hanya pada antarmuka IPv6, bukan pada IPv4.
Ini adalah hasilnya
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 -
Sekarang saya memiliki port 40122 pada host untuk ditautkan dengan port 22 pada kontainer.
Saya ingin SSH ke dalam wadah itu tetapi saya tidak dapat karena hanya terikat ke IPv6
Ini adalah versi buruh pelabuhan saya 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
Saya berlari menggunakan 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
saat penampung sedang berjalan.docker exec -ti 201bde6c839a /bin/bash
, setelah Anda masuk, posting output darips aux
dannetstat -taln
Jawaban:
Seperti yang ditunjukkan @ daniel-t di komentar: github.com/docker/docker/issues/2174 adalah tentang menunjukkan pengikatan hanya ke IPv6 di
netstat
, tetapi itu bukan masalah. Karena masalah github menyatakan:Dengan kata lain, hanya karena Anda melihatnya sebagai IPv6 saja, ia masih dapat berkomunikasi di IPv4 kecuali Anda telah mengatur IPv6 untuk hanya mengikat pada IPv6 dengan pengaturan net.ipv6.bindv6only. Agar jelas, net.ipv6.bindv6hanya harus 0 - Anda dapat menjalankan
sysctl net.ipv6.bindv6only
untuk memverifikasi.sumber
Pengaturan
net.ipv6.conf.all.forwarding=1
akan memperbaiki masalah.Ini dapat dilakukan pada sistem langsung menggunakan
sudo sysctl -w net.ipv6.conf.all.forwarding=1
sumber
sysctl net.ipv6.bindv6only=0
mengubah konfigurasi ini tidak membantu.Secara default, buruh pelabuhan menggunakan soket AF_INET6 yang dapat digunakan untuk koneksi IPv4 dan IPv6. Ini menyebabkan netstat melaporkan alamat IPv6 untuk alamat mendengarkan.
Dari RedHat https://access.redhat.com/solutions/3114021
sumber
Jika Anda ingin port kontainer Anda mengikat alamat ipv4 Anda, cukup:
bekerja untuk saya di buruh pelabuhan 1.9.1
sumber
MASALAH TERSELESAIKAN :
MENGGUNAKAN
docker run -it -p 80:80 --name nginx --net=host -d nginx
Masalah itulah yang kami hadapi dengan VM beberapa waktu alih-alih jaringan jembatan coba dengan host yang akan bekerja untuk Anda
sumber
Saya dapat mengakses kontainer buruh pelabuhan, setelah menonaktifkan SELinux
Untuk menonaktifkan SELinux sementara
#sudo setenforce 0
Kontainer buruh pelabuhan saya berjalan di Centos-7
sumber