Why are Docker build commands running so slow in Elastic Beanstalk?

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?

  • Isolate PHP versions on AWS EC2
  • Error Deploying Docker Container to Elastic Beanstalk
  • How to arrange web application docker containers in production stage
  • Create multiple Docker machines at once with docker-machine
  • Elastic Beanstalk CLI - Not replacing instance on deploy
  • How much maximum heap space does a Play Framework App use per default
  • How to run provision.sh on vagrant with docker provider
  • Docker image for windows components
  • File is not created in Docker
  • How to mimic “--log-driver=syslog” in Kubernetes
  • “Not a tty” error in Alpine-based duplicity image
  • Docker : Unable to resolve the name of the machine host?
  • 2 Solutions collect form web for “Why are Docker build commands running so slow in Elastic Beanstalk?”

    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:

    1. sudo apt-get install -y -q linux-image-extra-$(uname -r)
    2. 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.

    Docker will be the best open platform for developers and sysadmins to build, ship, and run distributed applications.