码头工人容器中无法获取宿主机主机名怎么办

  介绍

小编给大家分享一下码头工人容器中无法获取宿主机主机名怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

在nodejs环境中测试通过,其它语言同理,只需要使用获取环境变量的方法即可。

思路:

码头工人容器和宿主机环境是隔离的,但是可以在启动码头工人容器时将宿主机的主机名以环境变量的形式传入,代码在容器中获取该值即可。

操作:

docker  run  -d  -p  3000:3000 ——name  myTest  -e  HOST_Q=$(主机名),mytest: v1  #,使用-e 参数传入环境变量,值为主机名

如果使用yml文件启动:

版本:,& # 39;3 & # 39;   服务:   ,mysql:   ,图片:mysql: v1   ,container_name: xx-mysql   重启:,总是   ,网络:   安康才能;主机   ,环境:   安康;MYSQL_ROOT_PASSWORD=才能xxx0209   之处,才能HOST_Q=$(主机名),#,在这设置   ,港口:   安康;3306:3306才能   ,数量:   安康才能;/opt/数据/mysql:/var/lib/mysql: z

启动成功后,容器内部环境变量就多了一个HOST_Q,接下来使用程序取出即可:

nodejs:

#,从过程中取出环境变量对象   let  env =, process.env;   console.log (JSON.stringify (env));   #,env (& # 39; HOST_Q& # 39;]就是最终要获取的主机名   ,   #,输出   [2019 - 04 - 17 - t06:54:12.951z], [e1e7115e0a33],[信息]:,{“NODE_VERSION":“8.9.4",“HOSTNAME":“e1e7115e0a33",“YARN_VERSION":“1.3.2",“HOME":“/root",“HOST_Q":“emg-ubuntu-pub02",“PATH":“/usr/地方/sbin:/usr/地方/bin:/usr/sbin:/usr/bin:/sbin:/bin",“PWD":“/皚 java:

public  class  Test  {   ,public  static  void  main (String [], args), {   ,,Map<字符串,String>, map =, System.getenv ();   String 才能;hostName =, map.get (“HOST_Q");   System.out.println才能(主机名),,   ,}   }

<>强补充:码头工人容器无法访问宿主机报不出路线举办

一。问题描述

在码头工人部署纳科的时候遇到了这个样子的问题没有路由主机导致了纳科容器无法连接宿主机的码头工人数据库。

然后我就进入到了纳科容器里面,平了宿主机的地址,结果是通着的,然后使用telnet测试了3306端口,结果也会报出这个异常。

原因是什么呢?明明数据库外部可以正常连接访问,但是宿主机内部容器确实无法访问?

二。原因分析

在进行码头工人部署的时候我们采用的是桥网桥的模式。

启动码头工人时,码头工人进程会创建一个名为docker0的虚拟网桥,用于宿主机与容器之间的通信。当启动一个码头工人容器时,码头工人容器将会附加到虚拟网桥上,容器内的报文通过docker0向外转发。

如果码头工人容器访问宿主机,那么docker0网桥将报文直接转发到本机,报文的源地址是docker0网段的地址。而如果码头工人容器访问宿主机以外的机器,码头工人的SNAT网桥会将报文的源地址转换为宿主机的地址,通过宿主机的网卡向外发送。

因此,当码头工人容器访问宿主机时,如果宿主机服务端口会被防火墙拦截,从而无法连通宿主机,出现没有路由主机的错误。

而访问宿主机所在局域网内的其他机器,由于报文的源地址是宿主机ip,因此,不会被目的机器防火墙拦截,所以可以访问。

三。解决方案

1比;关闭宿主机的防火墙

systemctl  stop  firewalld

2比;在防火墙上开发指定的端口

firewall-cmd ——区=public ——添加一个端口=3306/tcp 永久的   firewall-cmd ——区=public ——添加一个端口=3307/tcp 永久的   firewall-cmd ——重载

注:在进行完防火墙的操作之后最好是要进行以下码头工人的重启,systemctl重启码头工人,否则容器到因为虚拟网桥失效而导致的iptables失败问题

以上是“码头工人容器中无法获取宿主机主机名怎么办”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

码头工人容器中无法获取宿主机主机名怎么办