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

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:



Solution 1:[1]

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

def test_valid_url_in_build_path(self):
    valid_urls = [
        'git://github.com/docker/docker',
        '[email protected]:docker/docker.git',
        '[email protected]: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 2:[2]

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 3:[3]

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

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 VonC
Solution 2 Philipp Fock
Solution 3 Hung