IP 配置#

物理环境 IP#

跨主机访问OpenMLDB服务,需要将OpenMLDB配置中的endpoint配置127.0.0.1改为0.0.0.0或公网IP,再启动OpenMLDB服务。请保证端口没有被防火墙阻挡。

Attention

单机版中,不只是需要改endpoint,nameserver的配置中还有tablet ip --tablet=,此处也需要修改。

Docker IP#

希望从容器的外部(无论是同一主机还是跨主机)访问容器内,请先 更改endpoint127.0.0.10.0.0.0(单机版中tablet配置项也需要更改),以避免不必要的麻烦。

容器外部访问(同一主机)#

在同一主机中,想要从容器的外部(物理机或者是其他容器)访问容器内启动的OpenMLDB服务端,可以直接使用bridge的方式连接,也可以暴露端口,还可以直接使用host网络模式。

Caution

Docker Desktop for Mac无法支持从物理机访问容器(以下任何模式都不能),参考i-cannot-ping-my-containers

但macOS中,可以从容器内访问其他容器。

bridge连接#

bridge连接不需要更改docker run命令,只需要查询一下bridge ip。

docker network inspect bridge

查看“Containers”字段,可以看到每个容器绑定的ip,客户端使用该ip就可以进行访问。

例如,启动容器并运行OpenMLDB单机版后,inspect结果为172.17.0.2,那么CLI连接可以使用:

../openmldb/bin/openmldb --host 172.17.0.2 --port 6527

暴露端口#

在启动容器时通过 -p 暴露端口,客户端可以使用本机ip地址或回环地址进行访问。

单机版需要暴露三个组件(nameserver,tabletserver,apiserver)的端口:

docker run -p 6527:6527 -p 9921:9921 -p 8080:8080 -it 4pdosc/openmldb:0.5.3 bash

集群版需要暴露zk端口与所有组件的端口:

docker run -p 2181:2181 -p 7527:7527 -p 10921:10921 -p 10922:10922 -p 8080:8080 -p 9902:9902 -it 4pdosc/openmldb:0.5.3 bash

Tip

-p 将“物理机端口”和“容器内端口”进行绑定,可能出现“容器端口号”在物理机上已被使用的情况。

如果OpenMLDB服务仅在单个容器内,只需要改变一下暴露的物理机端口号,客户端相应地改变访问端口。各个服务进程的配置项不需要更改。

如果OpenMLDB服务进程是分布式的,在多个容器内,出现“端口号被占用”,我们不推荐“切换暴露端口号”的方式,请改变配置的端口号,暴露时使用同样的端口号。

host network#

或者更方便地,使用 host networking,不进行端口隔离,例如:

docker run --network host -it 4pdosc/openmldb:0.5.3 bash

但这种情况下,很容易出现端口已被主机中其他进程占用。如果出现占用,请仔细更改端口号。

跨主机访问本机容器#

除了bridge模式无法做到跨主机访问,暴露端口和host network的方法均可以实现跨主机访问本机容器。