How can I make docker-compose build an image from a remote git repository?

GitDockerDocker Compose

Git Problem Overview


Docker-compose allows you to utilize either preëxisting docker images or build from source. For the build option, the official reference requires

> Either a path to a directory containing a Dockerfile, or a url to a git repository.

I'd like to take advantage of the latter case, so that I don't have to create a git submodule in my project, or register a new repository on Docker Hub. Unfortunately, there are no examples for how to format the url, and every form I've tried is mistaken for a relative file path.

e.g.

---
letsencrypt:
  build: https://github.com/letsencrypt/letsencrypt.git
...

Fails with the error:

> ERROR: build path /{MY_CURRENT_PATH}/https:/github.com/letsencrypt/letsencrypt.git either does not exist or is not accessible.

I didn't have any more luck with the other forms I've tried:

Git Solutions


Solution 1 - Git

Are you running version 1.5.2? It looks like this was actually recently added in https://github.com/docker/compose/pull/2430. Try upgrading.

Example:

---

version: '2'

services:
  redis:
    image: "redis:3.2.3"
    hostname: redis
  
  redis-commander:
    build: https://github.com/joeferner/redis-commander.git
    command: --redis-host redis
    links:
      - "redis:redis"
    ports:
      - 8081

Tested with:

$ docker-compose -v
docker-compose version 1.11.2, build dfed245

Solution 2 - Git

The file tests/unit/config/config_test.py shows:

def test_valid_url_in_build_path(self):
    valid_urls = [
        'git://github.com/docker/docker',
        'git@github.com:docker/docker.git',
        'git@bitbucket.org:atlassianlabs/atlassian-docker.git',
        'https://github.com/docker/docker.git',
        'http://github.com/docker/docker.git',
        'github.com/docker/docker.git',
    ]

This is confirmed with compose/config/config.py#L79-L85:

DOCKER_VALID_URL_PREFIXES = (
    'http://',
    'https://',
    'git://',
    'github.com/',
    'git@',
)

Solution 3 - Git

I think there is a better way to do this now!

If you want to use a Dockerfile that's located inside the repo and the repo is public, your best guess is to use the raw file.

E.g. for the file Dockerfile_dev inside https://github.com/certbot/certbot, you could use https://raw.githubusercontent.com/certbot/certbot/master/Dockerfile-dev

Then in docker-compose, add it like this in order to use the Dockerfile from the remote location.

certbot_dev:
  image: certbot-dev
  build: https://raw.githubusercontent.com/certbot/certbot/master/Dockerfile-dev

You can find the raw link, when you click on a button called 'Raw' inside the file preview: https://github.com/certbot/certbot/blob/master/Dockerfile-dev

find raw file on github

Solution 4 - Git

Sorry to revive this topic, but it came up as the first link and i could't find any other information elsewhere.

If you want to build from a specific repository tag, you will need to append #tagname such as

build: https://github.com/postgres/pgadmin4.git#REL-6_4

see the docker documentation.

Also building on top of the answer of @philipp-fock. Using the raw file works, as long as the original Dockerfile did not include any other files within that repository (no COPY, ADD)

Using

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionbillkwView Question on Stackoverflow
Solution 1 - GitAndy ShinnView Answer on Stackoverflow
Solution 2 - GitVonCView Answer on Stackoverflow
Solution 3 - GitPhilipp FockView Answer on Stackoverflow
Solution 4 - GitHungView Answer on Stackoverflow