Run MSSQL Server in Docker inside Vagrant Ubuntu VM
Goal
Run Microsoft SQL Server in a Docker container inside a Vagrant Ubuntu VM, accessible from the host machine.
Configuration Files
Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/focal64" # v 20.04 LTS
config.vm.synced_folder "./", "/vagrant"
config.vm.network "forwarded_port", guest: 1433, host: 1433
config.vm.provision :shell, path: "vagrant_provision.sh"
config.vm.provider "virtualbox" do |vb|
vb.name = "SqlServer"
vb.memory = 2048 # Minimum 2GB required
end
end
vagrant_provision.sh
echo "provisioning VM..."
sudo apt update
sudo apt-get update
## install docker and run
sudo apt -y install docker.io
sudo systemctl start docker
sudo systemctl enable docker
docker --version
echo "docker installed and running..."
## create group 'docker' and add user 'vagrant' (the one I connect with) to it
sudo groupadd docker
sudo usermod -aG docker vagrant
echo "docker group created and 'vagrant' user added to it..."
## install docker compose
sudo curl -L https://github.com/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
echo "docker compose installed..."
echo "done provisioning VM."
docker-compose.yaml
version: '3.7'
services:
sqlserver:
image: mcr.microsoft.com/mssql/server:2017-latest
container_name: mssql
ports:
- '1433:1433'
volumes:
- mssqldata:/var/opt/mssql
environment:
- ACCEPT_EULA=Yes
- SA_PASSWORD=StrongP@ssword!
- MSSQL_PID=Developer
volumes:
mssqldata:
Note: Use Docker volumes instead of bind mounts - binding the data folder directly fails.
Launch
vagrant up
vagrant ssh
docker-compose up -d
Alternative - run the container directly without docker-compose:
docker run --name mssql \
-e ACCEPT_EULA=Y \
-e MSSQL_PID="Developer" \
-e MSSQL_SA_PASSWORD="StrongP@ssword!" \
-v mssqldata:/var/opt/mssql \
-p 1433:1433 \
-d mcr.microsoft.com/mssql/server:2017-latest
Connect
From host machine:
Server: localhost:1433
User: sa
Password: StrongP@ssword!
From terminal inside Vagrant VM:
docker exec -it mssql /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P StrongP@ssword!