Edit on GitHub
Report issue
Page history

Author(s): @{[ username ]}  Published: {[ TutorialCtrl.tutorial.date_published | date:'mediumDate' ]}

This tutorial guides you through running Docker Compose in a container on a Container-Optimized OS instance.


  • Run Docker Compose with Docker on Container-Optimized OS.
  • Create an alias for the containerized docker-compose command.

Before you begin

  1. Create or select a Cloud Platform project from the Google Cloud Platform console's projects page.
  2. Enable billing for your project.


This tutorial uses billable components of Cloud Platform including

Use the Pricing Calculator to estimate the costs for your usage.

Setting up the virtual machine

Create a new Compute Engine instance using the Container-Optimized OS stable image.

  1. Open the Google Cloud Platform console.
  2. Create a new Compute Engine instance.
  3. Select the desired Zone, such as "us-central1-f".
  4. Select the desired Machine type, such as "micro" (f1-micro).
  5. Change the Boot disk to "Container-Optimized OS stable".
  6. Check the box to allow HTTP traffic in the Firewall section.
  7. Click the Create button to create the Compute Engine instance.

Getting the sample code

  1. After the instance is created, click the SSH button to open a terminal connected to the machine.
  2. Download the Hello World sample using the git command.

    git clone https://github.com/docker/dockercloud-hello-world.git
    cd dockercloud-hello-world

Running Docker Compose

Container-Optimized OS has many benefits, but since it is locked down by default, it is difficult to run software that is not bundled in a container. For example, the general instructions for installing Docker Compose will not work because very few parts of the filesystem are mounted as executable. Instead, you can run Docker Compose image.

  1. Download and run the Docker Compose image. Check the tags for Docker Compose to use the latest version.

    docker run docker/compose:1.13.0 version
  2. Run the Docker Compose command to run the sample code.

    So that the Docker Compose container has access to the Docker daemon, mount the Docker socket with the -v /var/run/docker.sock:/var/run/docker.sock option.

    To make the current directory available to the container, use the -v "$PWD:/rootfs/$PWD" option to mount it as a volume and the -w="/rootfs/$PWD" to change the working directory.

    docker run --rm \
        -v /var/run/docker.sock:/var/run/docker.sock \
        -v "$PWD:/rootfs/$PWD" \
        -w="/rootfs/$PWD" \
        docker/compose:1.13.0 up
  3. With the docker run command still running, open the Google Cloud Platform Console instances page. Click the link to your instance's External IP address.

    You should see a "Hello World" message appear.

  4. With the SSH window open, press Control-C on your keyboard to stop the sample application.

Making an alias to Docker Compose

The docker run ... docker/compose:1.13.0 up command is equivalent to running the docker-compose up command on systems where Docker Compose is installed by the usual method. So that you don't have to remember or type this long command, create an alias for it.

  1. Add a docker-compose alias to your shell configuration file, e.g. .bashrc.

    echo alias docker-compose="'"'docker run --rm \
        -v /var/run/docker.sock:/var/run/docker.sock \
        -v "$PWD:/rootfs/$PWD" \
        -w="/rootfs/$PWD" \
        docker/compose:1.13.0'"'" >> ~/.bashrc
  2. Reload the Bash configuration.

    source ~/.bashrc
  3. Change back to the sample directory if you aren't already there.

    cd ~/dockercloud-hello-world
  4. Run the sample code using the new docker-compose alias.

    docker-compose up

    You should be able to view the "Hello World" message at your instance's external IP address.

Next steps

See more by @{[ username ]} and more tagged {[ tag ]}{[ $last ? '' : ', ' ]}

Submit a Tutorial

Share step-by-step guides


Request a Tutorial

Ask for community help


GCP Tutorials

Tutorials published by GCP


Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see our Site Policies. Java is a registered trademark of Oracle and/or its affiliates.