如何从公共网络(互联网)访问Docker服务?

时间:2019-07-20 15:01:01

标签: docker docker-swarm

Docker群,
设置:只有主节点(公用ip:30.50.60.90和Intranet ip:10.0.0.3)在Internet上,工作节点(Intranet ip:10.0.0.6和10.0.0.9)在Internet上内部网。

服务创建-

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

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

2 个答案:

答案 0 :(得分:0)

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

有关更多信息,请选中Super User - What is port forwarding and what is it used for?

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

答案 1 :(得分:-1)

对于访问,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;
    }
}
相关问题