你们把 Nginx 放宿主机上跑,那怎么转发请求到 Docker 容器? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
thisisgpy
V2EX    问与答

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

  •  
  •   thisisgpy 2017-08-22 14:51:52 +08:00 5153 次点击
    这是一个创建于 3042 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    12 条回复    2017-08-22 17:35:59 +08:00
    dcalsky
        1
    dcalsky  
       2017-08-22 15:00:23 +08:00 via Android
    container can expose the port to host machine
    你只要转发给暴露出来的端口就好啦
    thisisgpy
        2
    thisisgpy  
    OP
       2017-08-22 15:39:21 +08:00
    @dcalsky 就是不想暴露端口,服务器上只开个 nginx 的 80
    dcalsky
        3
    dcalsky  
       2017-08-22 15:42:18 +08:00 via Android
    @thisisgpy 你是怕暴露端口有安全问题吗?没事的,你暴露出的是内网端口,只要不暴露到外网去都不会有问题,如果实在害怕,就加安全组。
    terrawu
        4
    terrawu  
       2017-08-22 15:46:54 +08:00
    docker-gen
    jarlyyn
        5
    jarlyyn  
       2017-08-22 15:48:14 +08:00
    难道不是自己组建一个 network,然后指定 ip 么…………
    jarlyyn
        6
    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
        7
    ryd994  
       2017-08-22 16:04:11 +08:00 via Android   1
    publish 可以选地址的
    -p 127.0.0.1:8000:80
    就可以
    @thisisgpy
    @dcalsky
    @jarlyyn
    ryd994
        8
    ryd994  
       2017-08-22 16:10:12 +08:00 via Android
    还有一种更安全一点的做法,适合配合 compose 或其他编排系统:
    再开一个 socat 容器,link 后端容器,socat 转发后端端口到 socs 文件
    socks 文件所在文件夹 mount 出来用
    通过对 socks 文件设置权限,可以实现更精细的权限控制
    不过一般来说本地程序都可信,127.0.0.1 也算够用了
    jarlyyn
        9
    jarlyyn  
       2017-08-22 16:20:19 +08:00
    @ryd994

    我试下来这个方案最好

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

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

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

    所以后来都是自己组个 network,异常好用。
    ryd994
        10
    ryd994  
       2017-08-22 16:32:50 +08:00 via Android
    @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
        11
    jarlyyn  
       2017-08-22 17:32:50 +08:00
    @ryd994

    组 network 优点是有 dns 啊
    hcymk2
        12
    hcymk2  
       2017-08-22 17:35:59 +08:00
    link 已经不推荐使用了 还是自己组网好。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2780 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 07:28 PVG 15:28 LAX 23:28 JFK 02:28
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86