【问题标题】:How can I make docker-compose build an image from a remote git repository?如何让 docker-compose 从远程 git 存储库构建图像?
【发布时间】:2015-12-06 17:37:33
【问题描述】:

Docker-compose 允许您使用预先存在的 docker 镜像或从源代码构建。对于构建选项,official reference 需要

包含 Dockerfile 的目录的路径,或 git 存储库的 url

我想利用后一种情况,这样我就不必在我的项目中创建一个 git 子模块,或者在 Docker Hub 上注册一个新的存储库。不幸的是,没有关于如何格式化 url 的示例,而且我尝试过的每种形式都被误认为是相对文件路径。

例如

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

因错误而失败:

错误:构建路径 /{MY_CURRENT_PATH}/https:/github.com/letsencrypt/letsencrypt.git 不存在或不可访问。

我尝试过的其他形式都没有运气了:

【问题讨论】:

    标签: git docker docker-compose


    【解决方案1】:

    您运行的是 1.5.2 版吗?看起来这实际上是最近在https://github.com/docker/compose/pull/2430 中添加的。尝试升级。

    例子:

    ---
    
    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
    

    测试:

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

    【讨论】:

    • 我忘记了docker的第一条规则:有疑问,升级。 $ docker-compose --version docker-compose version: 1.5.1 太糟糕了,第二条规则是,准备用剩下的时间来修复升级失败的问题……
    • 是的。 Docker 现在是一个快节奏的世界! :)
    • 如果您使用的是 Mac 或 Windows,请确保您使用 Docker Toolbox 来保持所有 Docker 工具的版本正确docker.com/docker-toolbox
    • 如何让它在 docker-compose version: 3 中工作?
    • @artificerpi 这可能吗?
    【解决方案2】:

    文件tests/unit/config/config_test.py显示:

    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',
        ]
    

    这已通过compose/config/config.py#L79-L85 确认:

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

    【讨论】:

      【解决方案3】:

      我认为现在有更好的方法来做到这一点!

      如果您想使用位于 repo 内的 Dockerfile,并且 repo 是公开的,那么您最好的猜测是使用原始文件。

      例如对于https://github.com/certbot/certbot中的文件Dockerfile_dev,你可以使用https://raw.githubusercontent.com/certbot/certbot/master/Dockerfile-dev

      然后在 docker-compose 中,像这样添加它,以便从远程位置使用 Dockerfile。

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

      当您在文件预览中单击一个名为“Raw”的按钮时,您可以找到原始链接:https://github.com/certbot/certbot/blob/master/Dockerfile-dev

      【讨论】:

      • 太棒了,这对我有用!谢谢。
      【解决方案4】:

      很抱歉恢复这个话题,但它是作为第一个链接出现的,我在其他地方找不到任何其他信息。

      如果您想从特定的存储库标签构建,您需要附加#tagname 比如

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

      见码头工人documentation

      还建立在@philipp-fock 的答案之上。使用原始文件有效,只要原始 Dockerfile 不包含该存储库中的任何其他文件(没有复制,添加)

      使用

      【讨论】:

        猜你喜欢
        • 2021-03-26
        • 1970-01-01
        • 2017-10-01
        • 1970-01-01
        • 2015-01-01
        • 2018-01-05
        • 1970-01-01
        • 1970-01-01
        • 2013-04-13
        相关资源
        最近更新 更多