https://github.com/bitcoin/bitcoin/blob/d72758c3f6c34cd835f5de3efc230964f3b1ea56/src/torcontrol.cpp#L539

If a user is running Tor proxy outside localhost (perhaps on other host inside LAN or in containerised environment) , the automatic creation of onion services ends up creating an onion service listening to hardcored 127.0.0.1 address on the Tor proxy's host instead of the private address of the bitcoind – effectively running an empty onion service listening the Tor proxy's localhost.
llyConnected(node))
                pre(node);
        }
        post();
    };
    // 
    void SetServices(const CService &addr, ServiceFlags nServices);
    void MarkAddressGood(const CAddress& addr);
    bool AddNewAddresses(const std::vector<CAddress>& vAddr, const CAddress& addrFrom, int64_t nTimePenalty = 0);
    std::vector<CAddress> GetAddresses(size_t max_addresses, size_t max_pct);
    /**
     * Cache is used to minimize topology leaks, so it should
     * be used for all non-trusted calls, for example, p2p.
     * A non-malicious call (from RPC or a peer with addr permission) should
     * call the function without a parameter to avoid using the cache.
     */
    std::vector<CAddress> GetAddresses(CNode& requestor, size_t max_addresses, size_t max_pct);
    // 
    // 
    void SetTryNewOutboundPeer(bool flag);
    bool GetTryNewOutboundPeer();
    // 
    // 
    // 
    // 
    // 
    // 
    int GetExtraOutboundCount();
    bool AddNode(const std::string& node);
    bool RemoveAddedNode(const std::string& node);
    std::vector<AddedNodeInfo> GetAddedNodeInfo();
    size_t GetNodeCount(NumConnections num);
    void GetNodeStats(std::vector<CNodeStats>& vstats);
    bool DisconnectNode(const std::string& node);
    bool DisconnectNode(const CSubNet& subnet);
    bool DisconnectNode(const CNetAddr& addr);
    bool DisconnectNode(NodeId id);
    //
    //
    //
    //
    //
    //
    ServiceFlags GetLocalServices() const;
    //
    void SetMaxOutboundTarget(uint64_t limit);
    uint64_t GetMaxOutboundTarget();
    //
    void SetMaxOutboundTimeframe(uint64_t timeframe);
    uint64_t GetMaxOutboundTimeframe();
    //
    //
    //
    bool OutboundTargetReached(bool historicalBlockServingLimit);
    //
    //
    uint64_t GetOutboundTargetBytesLeft();
    //
    //
    uint64_t GetMaxOutboundTimeLeftInCycle();
    uint64_t GetTotalBytesRecv();
    uint64_t GetTotalBytesSent();
    void SetBestHeight(int height);
    int GetBestHeight() const;
    /