Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

daemon.NewDaemon(): fix network feature detection on first start #43689

Merged
merged 1 commit into from
Jun 3, 2022

Commits on Jun 3, 2022

  1. daemon.NewDaemon(): fix network feature detection on first start

    Commit 483aa62 introduced a regression, causing
    spurious warnings to be shown when starting a daemon for the first time after
    a fresh install:
    
        docker info
        ...
        WARNING: IPv4 forwarding is disabled
        WARNING: bridge-nf-call-iptables is disabled
        WARNING: bridge-nf-call-ip6tables is disabled
    
    The information shown is incorrect, as checking the corresponding options on
    the system, shows that these options are available:
    
        cat /proc/sys/net/ipv4/ip_forward
        1
        cat /proc/sys/net/bridge/bridge-nf-call-iptables
        1
        cat /proc/sys/net/bridge/bridge-nf-call-ip6tables
        1
    
    The reason this is failing is because the daemon itself reconfigures those
    options during networking initialization in `configureIPForwarding()`;
    https://github.com/moby/moby/blob/cf4595265e7703e1e9745a30f1dd265acbc075d3/libnetwork/drivers/bridge/setup_ip_forwarding.go#L14-L25
    
    Network initialization happens in the `daemon.restore()` function within `daemon.NewDaemon()`:
    https://github.com/moby/moby/blob/cf4595265e7703e1e9745a30f1dd265acbc075d3/daemon/daemon.go#L475-L478
    
    However, 483aa62 moved detection of features
    earlier in the `daemon.NewDaemon()` function, and collects the system information
    (`d.RawSysInfo()`) before we enter `daemon.restore()`;
    https://github.com/moby/moby/blob/cf4595265e7703e1e9745a30f1dd265acbc075d3/daemon/daemon.go#L1008-L1011
    
    For optimization (collecting the system information comes at a cost), those
    results are cached on the daemon, and will only be performed once (using a
    `sync.Once`).
    
    This patch:
    
    - introduces a `getSysInfo()` utility, which collects system information without
      caching the results
    - uses `getSysInfo()` to collect the preliminary information needed at that
      point in the daemon's lifecycle.
    - moves printing warnings to the end of `daemon.NewDaemon()`, after all information
      can be read correctly.
    
    Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
    thaJeztah committed Jun 3, 2022
    Configuration menu
    Copy the full SHA
    b241e20 View commit details
    Browse the repository at this point in the history