Run Elasticsearch in Docker inside Vagrant VM
Goal
Run Elasticsearch in a Docker container inside an Ubuntu VM managed by Vagrant, with data persistence and port forwarding to your host machine.
Setup 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: 9200, host: 9200
config.vm.network "forwarded_port", guest: 9300, host: 9300
config.vm.provision :shell, path: "vagrant_provision.sh"
config.vm.provider "virtualbox" do |vb|
vb.name = "Elasticsearch"
vb.memory = 1024
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:
elasticsearch:
image: elasticsearch:1.7.6-alpine
container_name: elasticsearch
volumes:
- elasticsearchdata:/usr/share/elasticsearch/data
ports:
- "9200:9200"
- "9300:9300"
restart: always
volumes:
elasticsearchdata:
Running Elasticsearch
Start the VM and launch the container:
vagrant up
vagrant ssh
cd /vagrant
docker-compose up -d
Stopping and Cleanup
Stop with data persistence:
vagrant halt
Complete teardown:
vagrant destroy
Verify
Query from host or VM. Returns {} if no indexes exist:
curl http://localhost:9200/*