Docker、LXD 和 LXC 之间有什么区别。他们提供相同的服务还是不同的服务。
在安全性、稳定性和性能方面,LXC(Linux 容器)和FreeBSD 的监狱之间有什么显着区别吗?
乍一看,这两种方法看起来非常相似。
Linux 中是否有任何方法可以列出正在运行的主机上的所有命名空间?我需要检查特定进程的命名空间(例如,在 LXC 容器中运行的进程和主机上的所有其他进程),然后找出它们的 cgroup。
我在我的服务器上的 Docker LXC 容器内运行一些服务,我开始真正用它们做一些严肃的事情。
我不清楚的一件事是用户权限在容器内部和外部如何工作。例如,如果我在容器中运行 MySQL 并将其数据目录设置为/data
Docker 卷,那么容器内外的权限如何影响访问策略?
显然,这个想法是在容器中以自己的用户身份运行 MySQL(即mysql:mysql
),并赋予它对该目录的读写权限。我认为这将是相当简单的,只是chmod
ing 目录等。但这如何在容器之外工作?现在我有了这个名为“数据”的 Docker 共享卷,我该如何管理对它的访问控制?
我特别希望能够在 Docker 容器之外运行一个非特权用户,该用户将定期访问 MySQL 共享卷并备份数据。
如何设置权限、用户和组,以便主机上的特定用户可以读/写 Docker 共享卷中的文件和文件夹?
我正在尝试将主机上的文件夹挂载到 LXC 容器。
主机/mnt/ssd/solr_data
创建了一个文件夹(目前在根文件系统上,但稍后我将在那里安装一个 SSD 驱动器,所以我正在为此做准备)。
我希望该文件夹像/data
在容器中一样安装。
所以在容器 fstab 文件中,我有以下内容:
/mnt/ssd/solr_data /var/lib/lxc/Solr4StandAlone/rootfs/data ext4 defaults,noatime 0 0
Run Code Online (Sandbox Code Playgroud)
但这是不行的,我在启动容器时遇到此错误:
lxc-start: No such file or directory - failed to mount '/mnt/ssd/solr_data' on '/usr/lib/x86_64-linux-gnu/lxc//data'
lxc-start: failed to setup the mounts for 'Solr4StandAlone'
lxc-start: failed to setup the container
lxc-start: invalid sequence number 1. expected 2
lxc-start: failed to spawn 'Solr4StandAlone'
Run Code Online (Sandbox Code Playgroud) 这在systemd-nspawn的手册页中有说明
请注意,即使采取了这些安全预防措施,systemd-nspawn 也不适合安全容器设置。许多安全功能可能会被规避,因此主要用于避免容器对主机系统的意外更改。该程序的预期用途是调试和测试以及构建与引导和系统管理相关的软件包、发行版和软件。
这个问题随后在 2011 年的邮件列表中被问到,但答案似乎已经过时。
systemd-nspawn 包含现在CLONE_NEWNET
使用该--private-network
选项执行的代码。这似乎涵盖了私有AF_UNIX
命名空间问题,我猜提到了CAP_NET_RAW
和CAP_NET_BIND
问题。
在这一点上还有什么问题,例如 LXC 除了systemd-nspawn
目前可以做什么之外还能做什么?
目前是否可以设置具有 X11 功能的LXC 容器?我期待最轻的可用 X11 容器(内存方面),硬件加速是一个加分项,但不是必需的。
如果目前无法实现或现成可用,是否知道需要实现哪些功能才能支持它?
我正在探索 Ubuntu 12.04 中的 LXC 功能,我真的很想设置一个这样的网络:
client1: 192.168.56.101/24
lxc-host: 192.168.56.102/24
guest1 192.168.56.201/24
guest2 192.168.56.202/24
guest3 192.166.56.203/24
Run Code Online (Sandbox Code Playgroud)
我只想要一个“扁平”网络,其中来宾可以完全访问 LAN,并且可以从客户端看到。我习惯于使用 libvirt/KVM 桥接网络,如下所述:http : //libvirt.org/formatdomain.html#elementsNICSBridge
在主机上:
# /etc/network/interfaces
auto br0
iface br0 inet static
address 192.168.56.102
netmask 255.255.255.0
broadcast 192.168.56.255
bridge_ports eth1
Run Code Online (Sandbox Code Playgroud)
第一个来宾的 lxc.conf:
# /var/lib/lxc/guest1/config:
lxc.network.type=veth
lxc.network.link=br0
lxc.network.flags=up
lxc.network.hwaddr=00:16:3e:13:48:4e
lxc.network.ipv4=192.168.56.201/24
Run Code Online (Sandbox Code Playgroud)
看起来192.168.56.201对外界是不可见的,这不是我想要的。似乎我必须做以下事情之一:
1)在host和guest上手动设置路由
2)做些假的...提前在主机上创建虚拟接口,并配置来宾使用它们lxc.network.type=phys
。我不知道这是否真的有效。
我专注于 Ubuntu,但 RHEL/Fedora 的答案也很有用....
我想在现有的 lxc 中执行一个命令,而无需通过常规的 Linux init。lxc-execute
命令是我猜的,但是当我在现有的测试 lxc 上运行此命令时出现以下错误。
sudo lxc-execute -n test -- service apache2 start
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
lxc-execute: Failed to find an lxc-init
lxc-execute: invalid sequence number 1. expected 4
lxc-execute: failed to spawn 'test'
Run Code Online (Sandbox Code Playgroud)