无法使用fig / crane在Docker容器中执行git命令

时间:2014-11-25 23:04:14

标签: git containers docker bower git-submodules

我使用crane编排容器,我的项目源(NodeJS应用程序)有一个git子模块。当我在我的项目根目录中尝试bower install时运行我的容器时会发生以下错误:

bower jquery#~2.1.1            ECMDERR Failed to execute "git ls-remote --tags --heads git://github.com/jquery/jquery.git", exit code of #128

Additional error details:
fatal: Not a git repository: ../../.git/modules/src/web

这是我的crane.yml配置文件:

containers:
    db:
        dockerfile: images/db
        image: project/db
        run:
            detach: true
    web:
        dockerfile: images/web
        image: project/web
        run:
            volume: ["src/web:/src"]
            publish: ["8000:8000"]
            link: ["db:mongo"]
            detach: true

这是我的fig.yml

db:
    build: images/db
web:
    build: images/web
    volumes:
      - src/web:/src
    links:
      - db:mongo
    ports:
      - "8000:8000"

奇怪的是,当我将音量设置在当前目录(例如../myproject)之外时,它可以工作。但我真的需要在我的存储库中有一个子模块

修改

如果我使用命令行,它不起作用。所以它与无花果或起重机无关,但可能与Docker,bower或git如何工作有关。

注意

  • 我在Archlinux
  • 我还尝试了Docker fig,它会生成相同的错误

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

当您使用git submodule时,您会找到一个引用git目录的.git文件,类似于:

gitdir: ../../.git/modules/src/web

当您启动Docker容器时,您将.git文件放在.git/文件夹中,因此当容器在子模块中启动git命令时,它会尝试访问git对象哪些是无法访问的。

解决方案

使用.git

临时重命名git submodule文件

答案 1 :(得分:0)

如果您在git submodule内使用docker container并运行git或bower,则找到此问题的解决方案。在Dockerfile中,放置以下内容以修复git引用:

    # git submodules reference fix
    ENV GIT_DIR=/path/to/git/submodule