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:

  • how to create a docker image and update task definition in ecs with it using wercker
  • Registering an ELB to an ECS service with random host port
  • How do you share volumes between Docker containers in an Elastic Beanstalk application?
  • How to retrieve running version from ElasticBeanstalk app instance?
  • ECS CLI - Mount EFS when launching container instance
  • Connect to a remote database on a docker container hosted on an AWS instance
  • docker run -it -v /var/run/docker.sock:/var/run/docker.sock <image_name>

    Can I make Beanstalk invoke my container is such way?

  • Can Docker map multiple container ports to one host port?
  • docker mysql-server not starting on ubuntu [closed]
  • Exposing multiple ports from Docker within Elastic Beanstalk
  • Docker, Django and Selenium - Selenium unable to connect
  • Maven docker cache dependencies
  • How to capture packets for single docker container
  • 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.