Search code examples
flutterfirebase-tools

How to run the firebase emulator with a specific host address?


I'm trying to connect my flutter app running on a physical device with the firebase emulator on the local machine, followed these steps in this SOF to do so, but when running this command

firebase emulators:start --inspect-functions --export-on-exit ./test_data/ --import ./test_data/

with this configuration in firebase.json:

{
  "functions": {
    "predeploy": [
      "npm --prefix \"$RESOURCE_DIR\" run build"
    ],
    "source": "functions"
  },
  "firestore": {
    "rules": "firestore.rules",
    "indexes": "firestore.indexes.json"
  },
  "storage": {
    "rules": "storage.rules"
  },
  "emulators": {
    "auth": {
      "host": "0.0.0.0",
      "port": 9099
    },
    "functions": {
      "host": "0.0.0.0",
      "port": 5001
    },
    "firestore": {
      "host": "0.0.0.0",
      "port": 8080
    },
    "storage": {
      "host": "0.0.0.0",
      "port": 9199
    },
    "ui": {
      "enabled": true
    }
  }
}

it results in this output:

i  emulators: Starting emulators: auth, functions, firestore, storage
⚠  functions: You are running the functions emulator in debug mode (port=9229). This means that functions will execute in sequence rather than in parallel.
⚠  functions: The following emulators are not running, calls to these services from the Functions emulator will affect production: database, hosting, pubsub
✔  functions: Using node@14 from local cache.
i  emulators: Shutting down emulators.
i  functions: Stopping Functions Emulator
i  hub: Stopping emulator hub
⚠  firestore: Port 8080 is not open on 0.0.0.0, could not start Firestore Emulator.
⚠  firestore: To select a different host/port, specify that host/port in a firebase.json config file:
      {
        // ...
        "emulators": {
          "firestore": {
            "host": "HOST",
            "port": "PORT"
          }
        }
      }
i  emulators: Shutting down emulators.

and this error:

Error: Could not start Firestore Emulator, port taken.

Obvious solution

Kill whatever app using the port 8080, more likely it is the firestore emulator of the pervious session, from this SOF. After killing the app and running the command again, the same error occurs.

Note

even using my machine address in the local network instead of 0.0.0.0 did not work and results in the same output.


Solution

  • I had to use another port, like 8000, instead of 8080 for firestor entry in firebase.json so the command could run.

    firebase emulators:start --inspect-functions --export-on-exit ./test_data/ --import ./test_data/
    

    Taken from this github issue. Also, using 0.0.0.0 will make firebase emulator use localhost or the ip address of the machine in the local network.
    Although lsof -i :8080 doesn’t return any result indicating there is an application using the port 8080