Wil*_*lem 7 networking linux ubuntu lxc
多年来,我已经进行了一些 Docker 测试,但是对于特定类型的测试,我需要的不仅仅是应用程序容器。所以我转向 LXC/LXD 容器,这很棒。安装 LXD 后,我创建了自己的容器:
>> willem@ubuntu:/$ lxc launch images:centos/7/amd64 thing Creating thing
Starting thing
>> willem@ubuntu:/$ lxc list
+-------+---------+------------------+------+------------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+-------+---------+------------------+------+------------+-----------+
| thing | RUNNING | 10.0.3.30 (eth0) | | PERSISTENT | 0 |
+-------+---------+------------------+------+------------+-----------+
Run Code Online (Sandbox Code Playgroud)
伟大的。只有我似乎对这里的 IP 地址没有任何控制权。我找到了(在 Google 的帮助下并找到了)一个控制文件:
>> root@ubuntu:/# locate lxc.conf
/etc/init/lxc.conf
..
/var/log/lxd/thing/lxc.conf
Run Code Online (Sandbox Code Playgroud)
您可以在其中放置(看起来像)静态 IP4 地址。只有在重新启动容器时,主机似乎忘记了我的静态 IP,并从 DHCP 中获取了一个。问题:
--ip
开关docker run
)?小智 5
如果要为 LXD 中的容器指定 ip 地址,请查看该/etc/default/lxd-bridge
文件。在那里你会发现一个包含外部 dnsmasq 配置文件的地方。
假设您使用的是 Ubuntu 16.04,
/etc/default/lxd-bridge
在您最喜欢的编辑器中打开。您将需要使用sudo
.
在 16 号线附近,
LXD_CONFILE=""
Run Code Online (Sandbox Code Playgroud)
添加指向 dnsmasq 配置文件的条目。您将不得不创建此文件。所以随便命名吧。类似的东西lxd_bridge.conf
。
然后创建并编辑您在上面命名的文件。
为要为其分配特定 IP 地址的每个容器添加一行。
像这样:
dhcp-host=containername,ipaddress
Run Code Online (Sandbox Code Playgroud)
然后您需要重新启动 lxd-bridge,然后重新启动容器。
这是一篇关于此的详细文章:
请注意,如果您在容器中运行 Alpine linux,则需要采取额外的步骤来完成这项工作。 高山
系统信息:lxc-3.0.1
开Ubuntu Server 18.04.1
。
经过大量搜索,我发现这个简单的命令可以为容器分配静态IP:
lxc config set [container] raw.lxc 'lxc.net.[i].ipv4.address = [ip]/[subnet-mask]'
Run Code Online (Sandbox Code Playgroud)
其中[container]
、[i]
、[ip]
和[subnet-mask]
分别是容器名称、网络接口号、所需的静态 IP 地址和所需子网掩码的 CIDR。
例如,如果您想为名为 的容器的第 0 个网络接口240.10.0.20
分配子网掩码,您可以使用:255.255.255.0
hello
lxc config set hello raw.lxc 'lxc.net.0.ipv4.address = 240.10.0.20/24'
Run Code Online (Sandbox Code Playgroud)
执行命令后您可能需要重新启动容器。
请注意,这可能不会更改容器的当前 IP 地址(无论如何在我的设置中);容器应可通过其原始 IP 和新分配的 IP 访问。因此,容器条目lxc list
可能包含多个 IP 地址。
请在此处查看可附加到 的可接受的配置键lxc.net.[i]
。此网页包含有关 CIDR 表示法的信息。
不幸的是,我不记得我第一次找到这个解决方案的地方。这是一个相关的GitHub 问题,可能包含有用的信息。
这些配置将被放置在文件中/var/lib/lxc/ContainerName/config
。手册中指定了参数的可能值。它们涉及不同的区域,主机名,网络,控制台,ttys,挂载点,cgroups,功能,...
在网络下,您将找到您所需要的一切。系统会自动为未指定的变量生成敏感值。与您的问题最相关的部分如下:
lxc.网络名称
接口名称是动态分配的,但如果由于容器使用的配置文件使用通用名称而需要另一个名称,例如 eth0,该选项将重命名容器中的接口。
lxc.network.hwaddr
默认情况下,接口 MAC 地址是动态分配给虚拟接口的,但在某些情况下,需要这样做来解决 MAC 地址冲突或始终具有相同的链路本地 ipv6 地址
lxc.network.ipv4
指定要分配给虚拟化接口的 ipv4 地址。多行指定多个 ipv4 地址。地址的格式为 xyzt/m,例如。192.168.1.123/24。广播地址应指定在同一行中,紧接在 ipv4 地址之后。
lxc.network.ipv4.网关
指定用作容器内网关的 ipv4 地址。地址的格式为 xyzt,例如。192.168.1.123。还可以具有特殊值 auto,这意味着从桥接口获取主地址(由 lxc.network.link 选项指定)并将其用作网关。auto 仅在使用 veth 和 macvlan 网络类型时可用。
归档时间: |
|
查看次数: |
17751 次 |
最近记录: |