[systemd-devel] /etc/resolv.conf link in container

Johannes Ernst johannes.ernst at gmail.com
Wed Jun 17 13:35:42 PDT 2015


> On Jun 17, 2015, at 1:07, David Herrmann <dh.herrmann at gmail.com> wrote:
> 
> Hi
> 
> On Tue, Jun 16, 2015 at 11:39 PM, Johannes Ernst
> <johannes.ernst at gmail.com> wrote:
>> I have a root filesystem in directory foo/
>> It has symlink
>>    foo/etc/resolv.conf -> /run/systemd/resolve/resolv.conf
>> 
>> When I’m booting the container:
>>    sudo systemd-nspawn --directory foo --boot
>> 
>> I’m getting:
>>    Failed to copy /etc/resolv.conf to /home/…./foo/etc/resolv.conf: Too many levels of symbolic links
>> 
>> This message makes very little sense to me. Why is a copy necessary? and is that indeed /etc/resolv.conf or foo/etc/resolv.conf?
>> 
>> If I boot with -n, I don’t seem to get the error.
> 
> If you pass --private-network / -n, then we never touch resolv.conf.
> In all other cases, we copy resolv.conf from the host into the
> container. We usually assume that if your container runs in the same
> network as the host, then the container must also use the DNS features
> of the host.
> 
> The error code of "Too many levels of symbolic links" is ELOOP. This
> is returned by open() in many cases. In this example, it is returned
> because we passed O_NOFOLLOW to open(), but the final part of the path
> is a symlink. In that case, the kernel returns ELOOP to tell us that
> we're dealing with a symlink.
> 
> Maybe Lennart or Tom have some comments on that? Your example use-case
> (resolved in the container, even with shared network namespace) looks
> valid, though odd. I mean, what's the reason not to use "-n”?

Well, if there isn’t a reason, why does the mode exist?

> Anyway,
> maybe we can deal with ELOOP in setup_resolv_conf() and just print a
> big fat warning?
> But lets people who know that stuff comment first..
> 
> Thanks
> David



More information about the systemd-devel mailing list