use*_*546 77 ubuntu port ipv6 docker
我有docker主机,里面有一个容器.
docker主机仅绑定IPv6接口上的端口,而不绑定IPv4.
这是输出
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 -
Run Code Online (Sandbox Code Playgroud)
现在我在主机上有40122端口与容器上的端口22链接.
我想要SSH到该容器,但我无法将其唯一绑定到IPv6
这是我的泊坞版 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
Run Code Online (Sandbox Code Playgroud)
我跑了 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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
Mic*_*ael 51
正如@ daniel-t在评论中指出的那样:github.com/docker/docker/issues/2174是关于仅显示对IPv6的绑定netstat,但这不是问题.正如那个github发布的那样:
在设置代理时,Docker请求环回地址'127.0.0.1',Linux意识到这是一个存在于IPv6中的地址(如:: 0)并在两者上打开(但它正式是IPv6套接字).当你运行netstat时,它会看到这个,并告诉你它是一个IPv6 - 但它仍然在监听IPv4.如果你已经玩了一些设置,你可能已经禁用了Linux的这个技巧 - 通过设置net.ipv6.bindv6only = 1.
换句话说,仅仅因为您将其视为仅IPv6,它仍然能够在IPv4上进行通信,除非您将IPv6设置为仅使用net.ipv6.bindv6only设置绑定到IPv6.要清楚,net.ipv6.bindv6only应为0 - 您可以运行sysctl net.ipv6.bindv6only以验证.
Dar*_*n S 26
目前 docker 默认绑定 IPv4 和 IPv6。
\n如果您想明确“让 docker 使用 IPv4 进行端口绑定”(例如,仅绑定在 IPv4 端口上) ,请在/选项0.0.0.0:中的端口之前添加,如下所示:-p--publish
$ docker run --publish "0.0.0.0:80:80" --publish "0.0.0.0:443:443" --detach nginx\nRun Code Online (Sandbox Code Playgroud)\n完成后结果将如下所示:
\n$ docker ps\n\nCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n2459bd225751 nginx "/docker-entrypoint.\xe2\x80\xa6" 4 seconds ago Up 2 seconds 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp jovial_yonath\nRun Code Online (Sandbox Code Playgroud)\nnetstat 结果将如下所示:
\n$ sudo netstat -tulnp\n\nActive Internet connections (only servers)\nProto Recv-Q Send-Q Local Address Foreign Address State PID/Program name\ntcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 22676/docker-proxy\ntcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 22698/docker-proxy\nRun Code Online (Sandbox Code Playgroud)\n当然,您可以浏览或curl访问该设备以确保其正常工作。
如果您不添加“0.0.0.0”,它将绑定到两个 IP 版本,并且将PORTS读取0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp,出于安全、控制台垃圾邮件或可预测性原因,这可能是不可取的。
| 归档时间: |
|
| 查看次数: |
69645 次 |
| 最近记录: |