https://www.cockroachlabs.com/docs/stable/start-a-local-cluster-in-docker.html#os-linux
里面: -p 26257:26257 -p 8080:8080
解释: -p 26257:26257 -p 8080:8080: These flags map the default port for inter-node and client-node communication (26257) and the default port for HTTP requests to the Admin UI (8080) from the container to the host. This enables inter-container communication and makes it possible to call up the Admin UI from a browser.
我又个疑惑: 8080 是管理后台 UI 的端口,26257 是集群减通信的端口号。外部 8080 被占用了可以用 8081:8080 来映射。
1.请问容器内部端口可以换吗?就是 26257 和 8080,如果可以换怎么分区这两个?
2.多个不同的容器内部都用 8080 会冲突吗?
1
heimeil 2018-03-07 12:07:21 +08:00
容器内端口是隔离的,可以想象每个容器都是虚拟机
|
2
tomczhen 2018-03-07 12:18:25 +08:00
bridge 网络下可以把主机看成路由器,外部是通过 NAT 访问的,与路由器上的端口映射类似,同一个 Network 下的容器是同一台交换机下不同设备,每个容器可用端口范围都是独立的。
容器间互访,可以通过容器内网 IP 和 内网端口——即容器自身端口。外部想访问容器,就必须把容器端口 EXPOSE ——映射出来,暴露的端口属于主机端口,是不能冲突的。 |
4
tomczhen 2018-03-07 14:08:07 +08:00 via Android
补充一下,bridge 网络下,内外端口不一致时可能会产生一些问题。比如服务检测到的配置或环境,是容器内网 IP 和端口,如果一些自动生成的 URI 会使用这些值,就会产生问题。
另外就算映射了端口,外部客户端也是无法通过容器内网 IP 访问容器。 不过也应该不是绝对,如果路由可达应该可以,但这时应该也不算是 bridge 网络了。 |
5
mmnnyycc OP @tomczhen 不同容器端口是独立的,外部的 8080 端口已经被占用了。那么只能讲内部 8080 映射到外部的其他的接口了,如果内外不一致会出问题,可以更改内部的 8080 端口吗?看着文档没说啊
|
6
tomczhen 2018-03-07 14:22:16 +08:00 via Android 1
出不出问题要看具体情况。
修改内部端口确保内外端口一致我觉得是最优解,也容易排查问题。 Web 应用,如果有可以配置 URL root 的选项配置最好,没有可以使用反向代理解决。 如果是一定会把检测到的容器内 IP 返回给外部客户端使用,那用 host 网络运行容器是最直接的做法。当然,也可以看看其他网络类型能不能解决问题。 |