Marat Khalili wrote:
Occasionally after reboot of the host the /etc/resolv.conf file in some container comes up containing only two comment lines (taken from /etc/resolvconf/resolv.conf.d/head). It should be filled in accordance with dns-nameservers line in /etc/network/interfaces (network configuration is all static), but it doesn't, though IP address is assigned correctly. Any of the following fixes the problem:
* /etc/init.d/resolvconf reload
* ifdown/ifup
* lxc-stop/lxc-start
* lxc-attach shutdown -r now

What's bizzare is there're many containers with similar configuration on this host (actually, most created with the same script), but they usually come up ok, and there's nothing particularly different in successful and unsuccessful syslogs until some service inside (e.g. Apache) realizes it's got no DNS.

Since it is hard to reproduce the problem without rebooting production server, I don't even know where to dig. Probably someone has seen this kind of behaviour before?

It's Ubuntu 16.04 on both host and container:
Linux host 4.4.0-79-generic #100-Ubuntu SMP Wed May 17 19:58:14 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

There seems to be some ugliness with regeneration of /etc/resolv.conf at boot 
time.

I've seen some glitches around this process also.

In my case, I run a local copy of dnsmasq + completely disable all the
systemd-resolved lunacy, so here's how I deal with this...

Which might be more brute force than what your after + works well.

1) Completely destroy systemd-resolved

systemctl stop systemd-resolved
systemctl disable systemd-resolved
apt-get purge libnss-resolve

2) Create /etc/dnsmasq-caching.conf

port=53
listen-address=127.0.0.1
listen-address=127.0.0.53

interface=lo
bind-interfaces

no-resolv
no-hosts

# Google
server=8.8.8.8
server=8.8.4.4

3) Add to /etc/rc.local

echo "starting" | logger --tag "rc-local: dnsmasq"
dnsmasq -C /etc/dnsmasq-caching.conf

4) Create /etc/resolv.conf.override

nameserver 127.0.0.1

5) apt-get install incron

6) echo root > /etc/incron.allow

7) incrontab -e

/run/resolvconf/resolv.conf IN_CLOSE_WRITE,IN_NO_LOOP /bin/cp -f 
/etc/resolv.conf.override /run/resolvconf/resolv.conf
/etc/resolv.conf.override IN_CLOSE_WRITE,IN_NO_LOOP /bin/cp -f 
/etc/resolv.conf.override /run/resolvconf/resolv.conf

At this point the highly broken systemd-resolved is completely off.

Anytime /run/resolvconf/resolv.conf (resolvconf -u for example) or 
/etc/resolv.conf.override changes
/run/resolvconf/resolv.conf is overwritten using your /etc/resolv.conf.override 
file, so you always
know exactly what's in your resolv.conf file.

Like I said, might be overkill + ensures you know exactly how your resolution 
is occurring.
_______________________________________________
lxc-users mailing list
[email protected]
http://lists.linuxcontainers.org/listinfo/lxc-users

Reply via email to