你们把 Nginx 放宿主机上跑,那怎么转发请求到 Docker 容器?

2017-08-22 14:51:52 +08:00
 thisisgpy

给容器指定固定 IP ?还是每次容器启动跑进去看看 IP 再出来配?有没有容器启动后自己在宿主机的 hosts 里添加一条自己的映射的方案?

4801 次点击
所在节点    问与答
12 条回复
dcalsky
2017-08-22 15:00:23 +08:00
container can expose the port to host machine
你只要转发给暴露出来的端口就好啦
thisisgpy
2017-08-22 15:39:21 +08:00
@dcalsky 就是不想暴露端口,服务器上只开个 nginx 的 80
dcalsky
2017-08-22 15:42:18 +08:00
@thisisgpy 你是怕暴露端口有安全问题吗?没事的,你暴露出的是内网端口,只要不暴露到外网去都不会有问题,如果实在害怕,就加安全组。
terrawu
2017-08-22 15:46:54 +08:00
docker-gen
jarlyyn
2017-08-22 15:48:14 +08:00
难道不是自己组建一个 network,然后指定 ip 么…………
jarlyyn
2017-08-22 15:49:44 +08:00
大概这样

docker run --network=jarln.com --ip=10.1.1.2 --name blog -v /var/www/data:/goapp --entrypoint=/goapp/bin/blog --restart always debian
ryd994
2017-08-22 16:04:11 +08:00
publish 可以选地址的
-p 127.0.0.1:8000:80
就可以
@thisisgpy
@dcalsky
@jarlyyn
ryd994
2017-08-22 16:10:12 +08:00
还有一种更安全一点的做法,适合配合 compose 或其他编排系统:
再开一个 socat 容器,link 后端容器,socat 转发后端端口到 socs 文件
socks 文件所在文件夹 mount 出来用
通过对 socks 文件设置权限,可以实现更精细的权限控制
不过一般来说本地程序都可信,127.0.0.1 也算够用了
jarlyyn
2017-08-22 16:20:19 +08:00
@ryd994

我试下来这个方案最好

-p 127.0.0.1 的访问问题有两个,第一次每次都必须是不同的端口,端口和配置文件会很混乱

第二是效率问题。
做压力测试的时候会发现 docker-proxy 占用很高。

用 socks 的问题就更坑了,有个不同容器启动顺序的问题。

所以后来都是自己组个 network,异常好用。
ryd994
2017-08-22 16:32:50 +08:00
@jarlyyn 我 userland-proxy=false,docker-proxy 根本不走数据,只负责占用端口
有些内核 iptables 不支持 nat 到 127.0.0.1
我用的是 CentOS 7
不要单纯-p 127.0.0.1,-p 到随机端口还有什么意思嘛。明确指定本地端口号,人工维护本地端口号分配。一共就那么几种服务,按自己习惯分配一下就行了
启动顺序这个,所以我说要配合编排系统。compose 里 link 会隐含 depend
组 network 你还不是要人工维护地址分配
jarlyyn
2017-08-22 17:32:50 +08:00
@ryd994

组 network 优点是有 dns 啊
hcymk2
2017-08-22 17:35:59 +08:00
link 已经不推荐使用了 还是自己组网好。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/384849

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX