Docker通过端口绑定部署IPv6网站

只需要进行简单的端口绑定,甚至无需为Docker开启IPv6支持,用户就能通过IPv6来访问Docker容器中的服务。

必需条件

  • Docker宿主机有IPv6地址

限制

  • 容器内无法获得IPv6用户的真实地址
  • 与Docker Swarm默认的Ingress负载均衡器不兼容

设置方法

独立节点

使用常规方法docker run运行的容器,使用-p参数暴露的端口无需任何配置就能够通过IPv6访问,即使容器内的程序不支持IPv6访问也是如此。这是因为Docker绑定端口时会同时监听IPv4和IPv6地址,并将请求转发给容器,即起到将IPv6翻译成IPv4的作用。

示例:

# docker run -d -p 80:80 nginx
5267c2053a9009b258dcbda1f99fc7f63c8c190bca51c238809b691006b71228
# curl [::1] -g
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...

Docker Swarm集群

与直接运行的容器不同,在Swarm模式中运行的容器默认并不直接绑定端口(通过docker ps命令可以看到,并没有端口绑定信息),而是通过Ingress负载均衡器暴露到外网中。通过将端口绑定模式从ingress改为host可直接将端口绑定到宿主机上,以允许从IPv6网络中访问。使用host模式进行端口绑定要求一台宿主机上必需运行1个指定容器(超过1个会导致端口冲突,小于1个会导致不能通过该宿主机的地址访问容器)。

docker-compose.yml示例:

version: '3.2'

services:
    nginx:
        image: nginx
        ports:
            - target: 80
              published: 80
              mode: host
        deploy:
            mode: global

留言

向我们提问或者评论我们的文章。您的留言不会被直接显示在网站内。
请在浏览器中启用JavaScript来完成此表单。
Email