为解决每次区块链连接地址变动时,都必须修改程序内或者程序内附带的连接IP地址

故实现本地hosts文件IP与域名的映射

实现方式:

场景一:


服务为传统方式启动


  • 解决方法:
    在服务器本地的/etc/hosts文件内添加IP和域名的映射
vim /etc/hosts
IP 域名

场景二:


服务为容器方式启动


目前我司在使用docker run创建Docker容器时,共有两种方式指定容器的网络模式,分别是:

  • host模式,使用–net=host指定。
  • bridge模式,使用–net=bridge指定。(即 -p 宿主机映射端口:容器暴露端口)

针对这两种不同的容器网络模式,容器需要有不同的方式进行本地域名映射

  • 1、 host模式

使用参数

--network=host

容器每次启动时,会从宿主机中获取一份hosts文件,容器内修改hosts文件,不会影响到宿主机文件配置。宿主机内修改hosts文件后,容器重启即会重新获取一份hosts文件,覆盖原来的配置

举个例子:

宿主机中添加本地域名映射:
10.20.29.66 www.blockchain.com

容器启动方式:
docker run -itd --network=host --name nginx nginx:1.14
  • 2、bridge模式 (即-p 宿主机映射端口:容器暴露端口)

使用参数

==--add-host 域名:IP==

启动容器时,可配置以上参数,添加容器内域名映射,此映射不影响宿主机hosts文件配置

若不需要重新生成容器,仅需要改变参数,可在容器内vim修改hosts文件

举个例子:

docker run -itd --name nginx -p 8080:80 --add-host www.blockchain.com:10.20.29.66 nginx:1.14

场景三:

除以上传统方式及docker方式启动服务外,我司大部分环境需使用k8s启动。

若需要连接区块链的服务器为k8s启动,则可在此服务的Deployment文件中添加如下参数:

spec:
hostAliases:
- ip: "10.20.29.66"
hostnames:
- "www.blockchain.com"