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.
private:
    struct event_base* base;
    std::string target;
    TorControlConnection conn;
    std::string private_key;
    std::string service_id;
    bool reconnect;
    struct event *reconnect_ev;
    float reconnect_timeout;
    CService service;
    
    std::vector<uint8_t> cookie;
    
    std::vector<uint8_t> clientNonce;
    
    void add_onion_cb(TorControlConnection& conn, const TorControlReply& reply);
    
    void auth_cb(TorControlConnection& conn, const TorControlReply& reply);
    
    void authchallenge_cb(TorControlConnection& conn, const TorControlReply& reply);
    
    void protocolinfo_cb(TorControlConnection& conn, const TorControlReply& reply);
    
    void connected_cb(TorControlConnection& conn);
    
    void disconnected_cb(TorControlConnection& conn);
    
    static void reconnect_cb(evutil_socket_t fd, short what, void *arg);
};
TorController::TorController(struct event_base* _base, const std::string& _target):