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

请教关于一个 docker container 内多程序通过 127.0.0.1:port 进行通信的问题

  •  
  •   JackyBao · 2017-02-07 21:45:50 +08:00 via iPad · 5057 次点击
    这是一个创建于 2872 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在 vps 上很简单, server 端监听 127.0.0.1:443 , client 端链接 127.0.0.1:443 就可以了。
    但是在 docker container 内就不行了,只能开 2 个 container ,分别运行 server 和 client ,通过 host 公网的 ip 进行通信。

    请问有什么办法在同一个 docker container 内同时运行多个需要通过 tcp 端口进行通信的程序方法吗?

    谢谢!
    8 条回复    2017-02-08 10:10:15 +08:00
    mritd
        1
    mritd  
       2017-02-07 22:13:11 +08:00 via iPhone
    docker 是通过 iptables 控制的,网络互相隔离,你把多个容器 link 上就行了
    或者直接通过 docker -compose 启动
    JackyBao
        2
    JackyBao  
    OP
       2017-02-07 22:53:16 +08:00
    @mritd #1
    我就是用了你的 ss+kcptun docker ,才提出这个问题的。
    请问可以在一个 container 内同时部署 ss 和 kcptun 吗?谢谢!
    better0332
        3
    better0332  
       2017-02-07 22:58:43 +08:00
    都写到脚本里,启动脚本不就行了
    Reficul
        4
    Reficul  
       2017-02-07 23:07:57 +08:00 via Android
    1. 可以通过容器名来实现两个容器之间内部通信,然后 expose 需要的端口
    2. 写个脚本,一个容器运行两个程序,用本地环回
    3. 两个容器都用 host 模式,然后本地环回
    mritd
        5
    mritd  
       2017-02-08 07:27:59 +08:00
    @JackyBao 是可以的,你只需要让 ss 监听 0.0.0.0:xxxx 即可,然后 kcptun 指向 127.0.0.1 ;后续准备 切换到 ss 3.0 版本,把 kcptun 拆出来 做个 docker-compose 。。。
    JackyBao
        6
    JackyBao  
    OP
       2017-02-08 08:31:05 +08:00
    @mritd #5
    其实我倒觉得 kcptun 拆出来意义不大,我目前是用你的 ss docker 关 kcptun ,然后另外再加载一个 kcptun 作者自己的 docker ,用起来也挺方便。

    顺便提个建议,你的 docker 里面 kcptun 能否也做成直接加载启动参数,加载转义符的 json 文件的方式太反人类了。
    比如原作者的 docker 是这么启动的:
    server -t localhost:8388 --key password--crypt salsa20 --ds 0 --ps 0 --dscp 46 --nocomp

    谢谢!
    mritd
        7
    mritd  
       2017-02-08 09:56:49 +08:00   ❤️ 1
    @JackyBao 以前这么试过,目前的参数启动是通过一个 entrypoint 脚本实现的,但是 kcptun 加进去以后发现 参数不够用.....而且 kcptun 的参数太多,所以后来干脆转义 json 了,所以现在 kcptun 在里面放着 总感觉有点蛋疼;当初添加转义 json 只是为了方便有些人在集群模式下部署;我自己使用的话 直接 挂载配置文件 ( :
    leopku
        8
    leopku  
       2017-02-08 10:10:15 +08:00
    container 之间先通过 link 引用,然后在内部通过 link 指定的 host 访问,比如: host:3306
    expose 需要对外服务那个 container 端口即可
    不需要对外公开的服务正常情况下可以不用 expose 端口,比如数据库服务的 container
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5043 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 09:32 · PVG 17:32 · LAX 01:32 · JFK 04:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.