Docker in docker on AWS Elastic Beanstalk

I have a docker container running on elastic beanstalk. From within this container I want to run other containers using the docker daemon running on the host OS.

As I read here http://blog.docker.com/category/demos/, it is possible if the first container is invoked by:

  • Use docker or custom AMI in Amazon ElasticBeanstalk
  • Nginx fail on Docker deployment to Amazon
  • For a web application, does it make sense to have two separate containers for template and api server?
  • AWS EBS volume attachement using snapshot
  • Private environment variables when deploying with Docker on AWS Elastic Beanstalk
  • running a docker loop device on aws
  • docker run -it -v /var/run/docker.sock:/var/run/docker.sock <image_name>

    Can I make Beanstalk invoke my container is such way?

  • Terraform unable to get docker to join swarm
  • Autoscale volume and pods simultaneously (Kubernetes)
  • Connection from Java UI container to couchDB container refuses
  • Tool to automate Docker Swarm
  • How to write an Ansible playbook with Docker-compose
  • Moving docker-compose containersets around between hosts
  • 2 Solutions collect form web for “Docker in docker on AWS Elastic Beanstalk”

    Yes, its possible, but YMMV. Here’s a rundown:

    Dockerrun.aws.json allows you to map arbitrary paths into your container path. So, you can map your hosts’s /var/run (which contains docker.sock) into a temp path. Here are the steps:

    Make sure you’ve got a staging directory

    In your dockerfile:

    RUN mkdir /run-data
    

    Make sure Dockerrun.aws.json contains it:

    {
        "AWSEBDockerrunVersion": "1",
        "Logging": "/app/log",
        "Volumes": [
            {
                "HostDirectory": "/var/run",
                "ContainerDirectory": "/run-data"
            }
        ]
    }
    

    Then, the /run-data/docker.sock will contain a suitable docker socket for running commands. From this point, you can refer to the docker api and talk to it directly

    Happy docking!

    Unfortunately, Amazon Elastic Beanstalk adopts the policy “one container per VM“, which is fairly limiting.

    There might be a workaround, but it will be a waste of time.

    You shoud use Amazon EC2 if you need to do that.

    You can set up a new instance running Docker in less than 5 minutes!

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