billkw
billkw

Reputation: 3699

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:

Upvotes: 67

Views: 71930

Answers (4)

Hung
Hung

Reputation: 81

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

Upvotes: 5

Philipp Fock
Philipp Fock

Reputation: 193

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

Upvotes: 3

Andy Shinn
Andy Shinn

Reputation: 28553

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

Upvotes: 51

VonC
VonC

Reputation: 1329572

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@',
)

Upvotes: 11

Related Questions