EB was complaining that my build was timing out, so I ssh'd into an instance and decided to run docker build
myself to see what was happening. Every step, even something as simple as a mkdir
takes ages to run. Even a WORKDIR
stalls for at least a minute or two before executing.
On my local machine these are instant. What is going on?
Same issue here with an Ubuntu machine running on AWS. Turns out the the key to the solution was switching from devicemapper to aufs storage backend.
First, run the following command to figure out which storage backend your currently use:
docker info | grep Storage
If it says
devicemapper
, you probably found the reason for the slowness.Here is the prodecure for switching to the aufs backend in Ubuntu, taken from here:
sudo apt-get install -y -q linux-image-extra-$(uname -r)
sudo service docker restart
Note that you will have to rebuild all your existing images / containers, as they will be wiped when you switch to aufs.
Sorry to know you are facing this issue. Elastic Beanstalk environment creation involves creation of lots of resources like autoscaling group, EC2 instances, security groups, Elastic Load Balancer etc. After that software is installed on your beanstalk instances. I am assuming you are only talking about the slowness of software installation (docker build) on beanstalk.
If you just run mkdir that should not be very slow. It should be reasonably fast.
However if you think that docker build overall is running very slow that could be because of IO intensive operations.
One thing you can try is using EBS provisioned IOPs with Elastic Beanstalk. Read more about SSD instances here.
Can you try launching a new environment with SSD instances and see if docker build is still slow? If you can show an example dockerfile that takes a long time to build, I can try it out.