我想在 Ubuntu 16.04 Xenial 机器上开始使用 lxc 容器。我使用的是 xenial-backports 存储库中的 lxd 2.21。在我想要为容器提供网络访问权限之前,它运行良好。
我想创建一个新的桥接设备,该设备应使用命令 NAT 所有到互联网的连接lxc network create lxdnatbr0
。此命令产生错误消息
error: Failed to run: dnsmasq --strict-order --bind-interfaces --pid-file=/var/lib/lxd/networks/lxdnatbr0/dnsmasq.pid --except-interface=lo --interface=lxdnatbr0 --quiet-dhcp --quiet-dhcp6 --quiet-ra --listen-address=10.95.139.1 --dhcp-no-override --dhcp-authoritative --dhcp-leasefile=/var/lib/lxd/networks/lxdnatbr0/dnsmasq.leases --dhcp-hostsfile=/var/lib/lxd/networks/lxdnatbr0/dnsmasq.hosts --dhcp-range 10.95.139.2,10.95.139.254,1h --listen-address=fd42:2c73:3326:bbb7::1 --enable-ra --dhcp-range ::,constructor:lxdnatbr0,ra-stateless,ra-names -s lxd -S /lxd/ --conf-file=/var/lib/lxd/networks/lxdnatbr0/dnsmasq.raw -u lxd: dnsmasq: failed to create listening socket for 10.95.139.1: Address already in use
目前,我还有另外三个域名系统正在运行的进程。两个来自 libvirt,一个来自 NetworkManager:
$ ps ax|grep dnsmasq
3576 ? S 0:00 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/lib/libvirt/libvirt_leaseshelper 3577 ? S 0:00 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/lib/libvirt/libvirt_leaseshelper 5525 ? S 0:00 /usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/var/run/NetworkManager/dnsmasq.pid --listen-address=127.0.1.1 --cache-size=0 --conf-file=/dev/null --proxy-dnssec --enable-dbus=org.freedesktop.NetworkManager.dnsmasq --conf-dir=/etc/NetworkManager/dnsmasq.d 11318 pts/1 S+ 0:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn dnsmasq
起初我以为这是 libvirt 的错误,它有另一个域名系统进程正在运行。但即使我停止了它,NetworkManager 启动的另一个 dnsmasq 进程仍然存在。
有人知道我该如何实现这个功能吗?
答案1
错误信息显示:
failed to create listening socket for 10.95.139.1: Address already in use
当您使用 创建一个新的网络时lxc network create
,LXD 会dnsmasq
为您生成一个新进程,该进程仅绑定到新接口。
奇怪的是,它抱怨该地址已被使用,因为新地址dnsmasq
位于单独的独立接口上。为了确保没有竞争条件,请尝试
lxc network delete lxdnatbr0
然后再次创建它。
如果不起作用,请运行
ps ax | grep dnsmasq
以获取所有dnsmasq
进程的列表。