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

2017-02-07 21:45:50 +08:00
 JackyBao
在 vps 上很简单, server 端监听 127.0.0.1:443 , client 端链接 127.0.0.1:443 就可以了。
但是在 docker container 内就不行了,只能开 2 个 container ,分别运行 server 和 client ,通过 host 公网的 ip 进行通信。

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

谢谢!
4970 次点击
所在节点    问与答
8 条回复
mritd
2017-02-07 22:13:11 +08:00
docker 是通过 iptables 控制的,网络互相隔离,你把多个容器 link 上就行了
或者直接通过 docker -compose 启动
JackyBao
2017-02-07 22:53:16 +08:00
@mritd #1
我就是用了你的 ss+kcptun docker ,才提出这个问题的。
请问可以在一个 container 内同时部署 ss 和 kcptun 吗?谢谢!
better0332
2017-02-07 22:58:43 +08:00
都写到脚本里,启动脚本不就行了
Reficul
2017-02-07 23:07:57 +08:00
1. 可以通过容器名来实现两个容器之间内部通信,然后 expose 需要的端口
2. 写个脚本,一个容器运行两个程序,用本地环回
3. 两个容器都用 host 模式,然后本地环回
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
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
2017-02-08 09:56:49 +08:00
@JackyBao 以前这么试过,目前的参数启动是通过一个 entrypoint 脚本实现的,但是 kcptun 加进去以后发现 参数不够用.....而且 kcptun 的参数太多,所以后来干脆转义 json 了,所以现在 kcptun 在里面放着 总感觉有点蛋疼;当初添加转义 json 只是为了方便有些人在集群模式下部署;我自己使用的话 直接 挂载配置文件 ( :
leopku
2017-02-08 10:10:15 +08:00
container 之间先通过 link 引用,然后在内部通过 link 指定的 host 访问,比如: host:3306
expose 需要对外服务那个 container 端口即可
不需要对外公开的服务正常情况下可以不用 expose 端口,比如数据库服务的 container

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

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

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

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

© 2021 V2EX