管理Jail

  • 列出主机上运行的jails:

列出运行的jails
jls

输出类似:

列出运行的jails输出举例
   JID  IP Address      Hostname                      Path
     2  10.0.0.9        bsd                           /usr/local/jails/containers/bsd
     3  10.0.0.11       dev-1                         /usr/local/jails/containers/dev-1
     4  10.0.0.12       dev-2                         /usr/local/jails/containers/dev-2
     5  10.0.0.10       dev                           /usr/local/jails/containers/dev

另外, --libxo 参数可以通过 libxo 库显示其他类型格式,如 JSON , HTML

显示 JSON 格式输出:

JSON 格式列出运行的jails
jls --libxo=json | jq

则输出内容为JSON格式,方便使用程序自动化处理:

JSON 格式列出运行的jails
{
  "__version": "2",
  "jail-information": {
    "jail": [
      {
        "jid": 2,
        "ipv4": "10.0.0.9",
        "hostname": "bsd",
        "path": "/usr/local/jails/containers/bsd"
      },
      {
        "jid": 3,
        "ipv4": "10.0.0.11",
        "hostname": "dev-1",
        "path": "/usr/local/jails/containers/dev-1"
      },
      {
        "jid": 4,
        "ipv4": "10.0.0.12",
        "hostname": "dev-2",
        "path": "/usr/local/jails/containers/dev-2"
      },
      {
        "jid": 5,
        "ipv4": "10.0.0.10",
        "hostname": "dev",
        "path": "/usr/local/jails/containers/dev"
      }
    ]
  }
}
  • 启动和停止jail- 使用 service 命令:

启动jail
# 启动名为dev的jail
service jail start dev
停止jail
# 停止名为dev的jail
service jail stop dev
  • 访问jail:

访问 dev jail
jexec -u root dev

此时会看到进入了容器,并且可以执行基本操作:

dev jail 内部
root@dev:/ # 
root@dev:/ # df -h
Filesystem                    Size    Used   Avail Capacity  Mounted on
zroot/jails/containers/dev    903G    450M    903G     0%    /
root@dev:/ # hostname
dev
root@dev:/ # ifconfig
lo0: flags=1008049<UP,LOOPBACK,RUNNING,MULTICAST,LOWER_UP> metric 0 mtu 16384
	options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
	groups: lo
wifibox0: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500
	options=0
	ether 58:9c:fc:10:60:55
	inet 10.0.0.10 netmask 0xffffff00 broadcast 10.0.0.255
	id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
	maxage 20 holdcnt 6 proto rstp maxaddr 2000 timeout 1200
	root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0
	member: tap0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
	        ifmaxaddr 0 port 3 priority 128 path cost 2000000
	groups: bridge
tap0: flags=1008943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500
	options=80000<LINKSTATE>
	ether 58:9c:fc:10:ff:b4
	groups: tap
	media: Ethernet 1000baseT <full-duplex>
	status: active
	Opened by PID 375
  • 可以在host主机上操作jail内部运行服务:

在host主机上操作jail内部服务(这里举例启动 dev 内部的sshd服务)
# -l 参数用于指定jail名字,这样就可以在Host主机上操作jail中命令或服务
# 这里的 -l dev ,就是指定名为dev的jail进行操作
jexec -l dev sysrc sshd_enable="YES"
jexec -l dev service sshd start
  • 在Host主机上使用 pkg 可以指定jail进行安装软件包,但是需要注意 -j 参数指定jail名字:

在jail内部安装sudo
pkg -j dev install sudo

备注

为方便登录jail容器,执行 Jail环境初始化 构建一个ssh登录,admin用户使用的开发环境

  • 在创建好 dev jail 内部帐号 admin 之后,就可以使用该站搞 jexec 进入容器:

admin 访问 dev jail
sudo jexec -u admin dev