V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
thisisgpy
V2EX  ›  问与答

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

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

    给容器指定固定 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   ·   实用小工具   ·   2782 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 14:46 · PVG 22:46 · LAX 06:46 · JFK 09:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.