docker怎么获取hostname?
docker获取hostname的方法:
在nodejs环境中测试通过,其它语言同理,只需要使用获取环境变量的方法即可。
思路:docker容器和宿主机环境是隔离的,但是可以在启动docker容器时将宿主机的主机名以环境变量的形式传入,代码在容器中获取该值即可。
操作:docker run -d -p 3000:3000 --name myTest -e HOST_Q=$(hostname) mytest:v1 # 使用-e 参数传入环境变量,值为主机名
如果使用yml文件启动:version: '3'
services:
mysql:
image: mysql:v1
container_name: xx-mysql
restart: always
networks:
- host
environment:
- MYSQL_ROOT_PASSWORD=xxx0209
- HOST_Q=$(hostname) # 在这设置
ports:
- 3306:3306
volumes:
- /opt/data/mysql:/var/lib/mysql:z
启动成功后,容器内部环境变量就多了一个HOST_Q,接下来使用程序取出即可:
nodejs:# 从process中取出环境变量对象
let env = process.env;
console.log(JSON.stringify(env));
# env['HOST_Q']就是最终要获取的主机名
# output
[2019-04-17T06:54:12.951Z] [e1e7115e0a33] [info]: {"NODE_VERSION":"8.9.4","HOSTNAME":"e1e7115e0a33","YARN_VERSION":"1.3.2","HOME":"/root","HOST_Q":"emg-ubuntu-pub02","PATH":"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","PWD":"/"}
java:public class Test {
public static void main(String[] args) {
Map map = System.getenv();
String hostName = map.get("HOST_Q");
System.out.println(hostName);
}
}