lxc (Linux Containers) 是一个强大的操作系统级虚拟化工具,它允许你在单个 Linux 主机上运行多个隔离的 Linux 容器,这些容器共享主机的内核,但拥有自己独立的文件系统、进程和网络空间,因此比传统的虚拟机(如 KVM, VMware)更加轻量、快速和高效。

lxc 命令是管理这些容器的主要命令行接口,下面我将按照从入门到精通的顺序,详细介绍 lxc 命令的各个方面。
前提条件
在开始之前,请确保你的系统已经正确安装和配置了 LXC。
- 安装 LXC:
- Debian/Ubuntu:
sudo apt update && sudo apt install lxc - CentOS/RHEL/Fedora:
sudo yum install lxc(对于较新版本,可能需要启用 EPEL 或使用dnf)
- Debian/Ubuntu:
- 配置网络:
- LXC 通常需要
lxc-net服务来为容器提供 NAT 网络,你可以通过编辑/etc/default/lxc-net来配置它(修改LXC_BRIDGE的 IP 地址)。 - 启动并设置开机自启:
sudo systemctl enable --now lxc-net
- LXC 通常需要
- 配置存储:
- 默认情况下,容器镜像和文件存储在
/var/lib/lxc/目录下,确保该分区有足够的空间。
- 默认情况下,容器镜像和文件存储在
核心命令分类
lxc 命令功能非常丰富,我们可以将其分为以下几个主要类别:
- 容器生命周期管理: 创建、启动、停止、删除等。
- 容器信息查看: 列出、获取容器状态、配置等。
- 容器交互: 进入容器、在容器内执行命令等。
- 镜像管理: 列出、下载、发布、删除镜像。
- 网络管理: 创建和管理网络。
- 存储管理: 创建和管理存储卷。
- 文件操作: 在主机和容器之间传输文件。
详细命令说明与示例
1 容器生命周期管理
这是最常用的命令组。

| 命令 | 描述 | 示例 |
|---|---|---|
lxc-create |
创建一个新的容器,从一个镜像模板开始。 | lxc-create -n my-container -t download |
lxc-start |
启动一个已停止的容器。 | lxc-start -n my-container -d (-d 表示后台运行) |
lxc-stop |
停止一个正在运行的容器。 | lxc-stop -n my-container |
lxc-restart |
重启一个正在运行的容器。 | lxc-restart -n my-container |
lxc-delete |
删除一个容器。警告:此操作不可逆,会删除所有数据! | lxc-delete -n my-container |
lxc-freeze |
挂起(冻结)一个容器中的所有进程。 | lxc-freeze -n my-container |
lxc-unfreeze |
解冻一个容器。 | lxc-unfreeze -n my-container |
示例:创建并启动一个容器
-
交互式创建:
# 从官方镜像仓库创建一个 Ubuntu 22.04 容器 lxc-create -n my-ubuntu -t download
按照提示选择发行版(如
ubuntu)、版本(如04)、架构(如x86_64)和镜像类型(如default)。 -
命令行参数创建:
(图片来源网络,侵删)lxc-create -n my-centos -t download -- -d centos -r 8 -a x86_64
-
启动容器:
# 后台启动 lxc-start -n my-ubuntu -d # 查看容器状态 lxc-ls -f # 输出类似: # NAME STATE IPV4 IPV6 AUTOSTART # my-ubuntu RUNNING 10.0.3.150 ... NO
2 容器信息查看
| 命令 | 描述 | 示例 |
|---|---|---|
lxc-ls |
列出所有容器。 | lxc-ls --fancy (以漂亮的格式显示) |
lxc-info |
显示容器的详细信息(状态、IP、PID等)。 | lxc-info -n my-ubuntu |
lxc-config |
显示或修改容器的配置文件。 | lxc-config -n my-ubuntu |
lxc-attach |
进入一个正在运行的容器的命名空间。 | lxc-attach -n my-ubuntu -- bash |
示例:查看容器详情
# 查看容器状态和IP地址 lxc-info -n my-ubuntu # 输出类似: # Name: my-ubuntu # State: RUNNING # IP: 10.0.3.150 # ... # 查看容器配置文件 lxc-config -n my-ubuntu # 输出类似: # lxc.uts.name = my-ubuntu # lxc.net.0.type = veth # lxc.net.0.link = lxcbr0 # ...
3 容器交互
| 命令 | 描述 | 示例 |
|---|---|---|
lxc-attach |
推荐,在容器内启动一个新会话或执行命令。 | lxc-attach -n my-ubuntu -- apt update |
lxc-console |
连接到容器的控制台(需要安装 lxc-tools)。 |
lxc-console -n my-ubuntu (按 Ctrl+a q 退出) |
示例:进入容器
# 进入容器并启动一个 bash shell lxc-attach -n my-ubuntu -- bash # 进入容器后,你就在容器的 root 用户环境下了 root@my-ubuntu:~# uname -a Linux my-ubuntu 5.15.0-88-generic #98-Ubuntu SMP Mon Oct 2 15:18:56 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
4 镜像管理
| 命令 | 描述 | 示例 |
|---|---|---|
lxc-images |
管理 LXC 镜像。 | lxc-images list images |
lxc-image |
单独的镜像管理命令。 | lxc-image list ubuntu |
lxc-publish |
将一个正在运行的容器发布为一个新的镜像。 | lxc-publish -n my-ubuntu --alias my-custom-ubuntu |
示例:查看和管理镜像
# 列出所有可用的镜像 lxc-images list images # 列出本地的所有镜像 lxc-image list local # 删除一个本地镜像 lxc-image delete local:my-custom-ubuntu
5 网络与存储高级管理
LXC 还支持创建自定义的网络和存储池,以实现更高级的部署。
-
网络管理 (
lxc-network):lxc-network create: 创建一个自定义网络。lxc-network delete: 删除一个自定义网络。lxc-network list: 列出所有网络。
-
存储管理 (
lxc-storage):lxc-storage create: 创建一个存储池(使用 ZFS, LVM, Btrfs)。lxc-storage delete: 删除一个存储池。lxc-storage list: 列出所有存储池。
这些高级功能通常在自动化部署或需要高性能、快照等特性时使用。
6 文件操作
| 命令 | 描述 | 示例 |
|---|---|---|
lxc-push |
将文件从主机推送到容器内。 | lxc-push /path/on/host/file.txt my-ubuntu/root/ |
lxc-pull |
从容器内拉取文件到主机。 | lxc-pull my-ubuntu/root/file.txt /path/on/host/ |
示例:在主机和容器间传输文件
# 在主机上创建一个文件 echo "Hello from host!" > hello.txt # 将文件推送到容器 lxc-push hello.txt my-ubuntu/tmp/ # 进入容器验证文件是否存在 lxc-attach -n my-ubuntu -- ls -l /tmp/hello.txt
容器配置文件详解
容器的核心配置是 /var/lib/lxc/<container-name>/config 文件,了解这个文件对于高级用户至关重要。
- 自动配置: 当你使用
lxc-create创建容器后,LXC 会自动生成这个配置文件。 - 手动编辑: 你可以使用
vim或nano等编辑器手动修改它。 - 配置项:
lxc.uts.name: 容器的主机名。lxc.net.0.type: 网络类型,如veth(虚拟以太网设备)。lxc.net.0.link: 绑定到的网桥,如lxcbr0(LXC 默认网桥)。lxc.net.0.flags: 标志,如up。lxc.apparmor.profile: AppArmor 配置文件。lxc.seccomp.profile: Seccomp 配置文件。lxc.mount.auto: 自动挂载点,如cgroup:mixed proc:mixed.
示例:修改容器的内存限制
编辑 /var/lib/lxc/my-ubuntu/config 文件,添加以下行:
# 设置内存限制为 512MB lxc.cgroup.memory.limit_in_bytes = 536870912 # 设置交换内存限制为 1GB lxc.cgroup.memory.memsw.limit_in_bytes = 1073741824
修改后,需要重启容器才能生效。
总结与最佳实践
| 场景 | 常用命令组合 |
|---|---|
| 快速创建并启动 | lxc-create -n <name> -t download -> lxc-start -n <name> -d |
| 管理容器 | lxc-ls -f (查看列表) -> lxc-info -n <name> (查看信息) -> lxc-stop -n <name> (停止) |
| 进入容器 | lxc-attach -n <name> -- <command> (执行命令) 或 lxc-attach -n <name> -- (交互式) |
| 清理 | lxc-delete -n <name> |
最佳实践:
- 使用
lxc-attach而非chroot:lxc-attach是进入容器的标准、安全的方式。 - 为容器命名: 使用有意义的名称,如
web-server-01,db-master。 - 理解配置文件: 不要害怕编辑
config文件,它是定制化容器的关键。 - 善用镜像: 从官方镜像开始,然后通过
lxc-publish创建自己的自定义镜像,以保持环境一致性。 - 考虑高级后端: 对于生产环境,考虑使用 ZFS 或 LVM 作为存储后端,以获得快照、克隆等强大功能。
希望这份详细的 lxc 命令指南对你有帮助!从这些基础命令开始,你就可以开始探索 LXC 的强大功能了。
