【问题标题】:How to access a docker service from public net (internet)?如何从公共网络(互联网)访问 docker 服务?
【发布时间】:2019-07-21 12:48:09
【问题描述】:

Docker swarm,
设置:只有主节点(公共 ip:30.50.60.90 和内网 ip:10.0.0.3)在互联网上,工作节点(内网 ip:10.0 .0.6 和 10.0.0.9) 在 Intranet 上。

服务创建-

$docker service create \  
  --name my-nginx \
  --network my-overlay \
  --replicas 1 \
  -p 8080:80 \
  nginx:latest

现在,从互联网上点击http://30.50.60.90:8080 有用吗?
如果是这样,那么路由网格在这里的作用是什么?

【问题讨论】:

  • 尝试使用-p 8080:80
  • 完成 - 编辑为 -p 8080:80

标签: docker docker-swarm


【解决方案1】:

如果您不配置防火墙或路由器 NAT 来转发端口,则无论您知道自己的公共 IP 地址,都无法从 Internet 访问它。您的公共 IP 地址指向您的路由器,但是,从那里,您的路由器隐藏了您的本地网络,您的 swarm 可能部署在其中。为了从互联网访问端口,您必须在路由器中配置 NAT 以将端口转发到您的计算机,从那里,您的服务应该可以访问,只要部署了容器。

更多信息,请查看Super User - What is port forwarding and what is it used for?

如果您需要一种简单的方法来通过 Internet 获取服务,我会给ngrok 一个机会。

【讨论】:

  • 主节点位于公共互联网上,即可以从网络访问(路由器规则使用 ip 伪装处理)。那么该服务是否可以通过互联网获得......以及路由网格的作用是什么。
【解决方案2】:

为了访问,docker 服务需要反向代理,因为 docker swarm 在内部网络中运行服务。 docker 服务 IP 在 Internet 上不公开,因为服务在 docker-machine 上运行,docker-machine 是网络隔离。 您可以为反向代理设置 Nginx 或任何负载均衡器。

比如Nginx中的反向代理

 server {
    listen 80;
    server_name hello.com www.hello.com;

    location / {
        proxy_pass http://your_server_ip:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-24
    • 2013-02-06
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    相关资源
    最近更新 更多