判断自己的 Linux 服务器是虚拟机还是物理机还是 Docker 环境

文章
林里克斯

判断自己的 Linux 服务器是虚拟机还是物理机还是 Docker 环境


实验平台:CentOS Linux release 7.8.2003 (AltArch)

systemd-detect-virt Version:systemd 219


1.命令 systemd-detect-virt 详解

$ systemd-detect-virt --help

  -h --help             #打印帮助信息
     --version          #打印版本信息
  -c --container        #检测是否在容器环境中,(共享内核虚拟化)不一定全正确,会介绍更换的识别的方法
  -v --vm               #检测是否在虚拟环境中,(虚拟化硬件)
  -q --quiet            #不输出任何东西,只设置返回值

2.输出结果列表

Type ID Product
虚拟机 qemu QEMU 软件虚拟机(未使用KVM)
kvm Linux 内核虚拟机(使用除 Oracle Virtualbox 之外的其他虚拟机管理程序)
zvm s390 z/VM
vmware VMware 虚拟机
microsoft Hyper-V 虚拟机
oracle Oracle VirtualBox 虚拟机
xen Xen 虚拟机(仅 domU, 非 dom0)
bochs Bochs 模拟器
uml User-mode Linux
parallels Parallels Desktop, Parallels Server
bhyve bhyve, FreeBSD hypervisor
qnx QNX hypervisor
容器 openvz OpenVZ/Virtuozzo
lxc LXC 容器
lxc-libvirt 通过 libvirt 实现的容器
systemd-nspawn systemd 最简容器
docker Docker 容器
rkt rkt 应用容器

3.确认自己机器是否是物理机

$ systemd-detect-virt -v
vmware
#返回 VMware 为虚拟机
$ systemd-detect-virt -v
none
#返回 none 为物理机

3.1 通过命令来判断

$ lscpu | grep -Piq 'Hypervisor vendor' && echo "Virtual Machine" || echo "Physical Machine"
Physical Machine
#物理机
$ lscpu | grep -Piq 'Hypervisor vendor' && echo "Virtual Machine" || echo "Physical Machine"
Virtual Machine
#虚拟机

4.判断自己的机器是否是 Docker 容器

$ cat /proc/1/cgroup | grep -qi docker && echo "Docker" || echo "Not Docker"
Docker
$ cat /proc/1/cgroup | grep -qi docker && echo "Docker" || echo "Not Docker"
Not Docker
#许多容器里都没有 systemd-detect-virt 命令,且此命令并不一定能判断出是否是 Docker 容器

4.1 通过 pid 1 来确认是否容器

#ps -ef        
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 Jan07 ?        00:00:00 bash /wiz/app/entrypoint.sh
root         32      1  0 Jan07 ?        00:14:22 /usr/bin/redis-server 127.0.0.1:6379
mysql        52      1  0 Jan07 ?        00:22:04 /usr/sbin/mysqld
root         55      1  0 Jan07 ?        00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx        56     55  0 Jan07 ?        00:00:01 nginx: worker process
nginx        57     55  0 Jan07 ?        00:00:01 nginx: worker process
#PID 为 1 的进程是应用本身,所以是容器

Over~

版权协议须知!

本篇文章来源于 Uambiguous ,如本文章侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意

1831 0 2021-01-12


分享:
icon_mrgreen.gificon_neutral.gificon_twisted.gificon_arrow.gificon_eek.gificon_smile.gificon_confused.gificon_cool.gificon_evil.gificon_biggrin.gificon_idea.gificon_redface.gificon_razz.gificon_rolleyes.gificon_wink.gificon_cry.gificon_surprised.gificon_lol.gificon_mad.gificon_sad.gificon_exclaim.gificon_question.gif
博主卡片
林里克斯 博主大人
一个致力于Linux的运维平台
运维时间
搭建这个平台,只为分享及记载自己所遇之事和难题。

现在时间 2024-12-28

今日天气
站点统计
  • 文章总数:241篇
  • 分类总数:29个
  • 评论总数:12条
  • 本站总访问量 353618 次

@奥奥

@Wong arrhenius 牛比

@MakerFace 厉害了!