Running Azurite emulator in the background on Windows startup
Krzysztof Koziarski
Posted on April 21, 2023
Azurite is an open-source emulator that enables you to test your applications using Azure Blob, Queue Storage, and Table Storage in a local environment without any cost.
Azurite replaces the Azure Storage Emulator and is regularly updated to ensure support for the latest versions of the Azure Storage APIs.
However, Azurite has one significant drawback compared to the outdated Azure Storage Emulator - it cannot be run in the background without keeping a console/terminal window open at all times.
The obsolete Azure Storage Emulator could be run in the background without opening a new window by running it from the command line:
"C:\Program Files (x86)\Microsoft SDKs\Azure\Storage Emulator\AzureStorageEmulator.exe" start
You could create a start-azure-storage-emulator.cmd
script and put the command inside that script, then copy/move it to the Windows Startup folder and voila - the emulator was running in the background and you could forget about it.
Unfortunately this is not possible for Azurite 😥
Options for starting the Azurite emulator
Option 1 - use Docker
One way is to use Docker and run Azurite inside docker:
docker run -d --restart always --name azurite -p 127.0.0.1:10000:10000 -p 127.0.0.1:10001:10001 -p 127.0.0.1:10002:10002 -v c:/dev/data/Azurite:/workspace mcr.microsoft.com/azure-storage/azurite azurite -l /workspace --blobHost 0.0.0.0 --blobPort 10000 --queueHost 0.0.0.0 --queuePort 10001 --tableHost 0.0.0.0 --tablePort 10002
The important thing here is to bind the volume: -v c:/dev/data/Azurite:/workspace
where the data is stored, so that it is not lost when the container or Docker is stopped.
But sometimes you can't or don't want to use Docker... What options do you have then?
Option 2 - Run Azurite manually
Run Azurite whenever you need it and keep the console window open all the time.
azurite -l "C:\dev\data\Azurite" --blobHost 0.0.0.0 --blobPort 10000 --queueHost 0.0.0.0 --queuePort 10001 --tableHost 0.0.0.0 --tablePort 10002
Option 3 - Adding Azurite to the Windows startup
This is the option I want to focus on in this article.
Installation
npm install -g azurite
Create batch script
Create a C:\dev\scripts\azurite-startup.cmd
file, open it in notepad and paste the following content:
start /B /MIN azurite -l "C:\dev\data\Azurite" --blobHost 0.0.0.0 --blobPort 10000 --queueHost 0.0.0.0 --queuePort 10001 --tableHost 0.0.0.0 --tablePort 10002 > "C:\dev\data\Azurite\azurite.log" 2>&1
The -l, --location
option is important here - this is the location of the workspace, where Azurite will store all data.
> "C:\dev\data\Azurite\azurite.log" 2>&1
means you want to redirect standard output and errors to the specified file.
You don't need to specify the *Host
and *Port
parameters if you don't want to change the default hosts and ports.
Create VBScript
Create a C:\dev\scripts\azurite-win-autostart.vbs
file, open it in notepad and paste the following content:
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run chr(34) & "C:\dev\scripts\azurite-startup.cmd" & Chr(34), 0
Set WshShell = Nothing
Windows auto-startup
To run the VBScript file on startup, place it (or it's shortcut right click -> Create shortcut
) in the Windows Startup folder. To do this, follow these steps:
- Press the
Win + R
to open the Run dialog box - Type
shell:startup
and press Enter - Copy the VBScript file you created earlier into the Startup folder.
Restart your computer and the batch script should start without a console window.
Find running Azurite process(es)
If Azurite is running in the background, you won't be able to find or stop the process easily.
You can find it using a PowerShell command:
Get-Process -name "cmd","node" -ErrorAction Ignore | Where-Object { $_.CommandLine -like '*azurite*' -and $_.CommandLine -like '*--blobPort*' }
An even better way is to create functions and/or aliases.
Open the PowerShell $PROFILE file in Notepad: notepad $PROFILE
and paste the following content at the end:
function get-azurite-processes { Get-Process -name "cmd","node" -ErrorAction Ignore | Where-Object { $_.CommandLine -like '*azurite*' -and $_.CommandLine -like '*--blobPort*' } }
Set-Alias -Name azp -Value get-azurite-processes -Description "Get Azurite background processess (node and cmd)"
function stop-azurite-processes { get-azurite-processes | Stop-Process }
This will find the cmd
and node
processes responsible for running Azurite.
To stop Azurite, you can run the function you created in the previous step:
stop-azurite-processes
Posted on April 21, 2023
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.