Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 用于构建服务的GitHub存储库_Docker_Docker Compose - Fatal编程技术网

Docker 用于构建服务的GitHub存储库

Docker 用于构建服务的GitHub存储库,docker,docker-compose,Docker,Docker Compose,我必须使用私有GitHub存储库来构建服务示例。我在GitHub repo中添加了非sou\u private\u id\u rsa作为部署密钥 docker compose.yml version: '3.7' services: db: ... web: ... example: build: git@github.com:example/example.git volumes: - '~/.ssh/not_so_private_id_rsa:/root/.ssh

我必须使用私有GitHub存储库来构建服务
示例
。我在GitHub repo中添加了
非sou\u private\u id\u rsa
作为部署密钥

docker compose.yml

version: '3.7'
services:
 db:
  ...
 web:
  ...
 example:
  build: git@github.com:example/example.git
  volumes:
   - '~/.ssh/not_so_private_id_rsa:/root/.ssh/id_rsa'
在macOS 10.15(Catalina)上运行
docker compose build
时,出现以下错误:

$ docker-compose build
Building example
ERROR: error fetching: error: cannot run ssh: No such file or directory
fatal: unable to fork
: exit status 128
问题
  • 这是在docker compose.yml中使用私有GitHub存储库的正确方法吗
  • 我怎样才能修好它

  • PS:我知道,但它没有解决我的问题。

    到目前为止,最好的方法是在主机上克隆存储库。通常,您可以将
    Dockerfile
    docker compose.yml
    提交到存储库,然后所有内容都将放在一个位置

    git clone git@github.com:example/example
    cd example
    docker-compose up --build
    
    在Dockerfile中运行git clone有几个主要问题。标准的
    docker build
    层缓存将跳过它认为已经运行的命令,因此很容易丢失当前提交。您可以非常合理地希望构建一个基于未提交代码或分支的映像,这很难在外部Dockerfile中表达。但最大的问题是资历

    显示的路径将不起作用,因为
    生成:
    卷:
    行将在两个单独的步骤中考虑。您必须使用多阶段构建才能签出存储库,但不能将凭据泄漏给可能获得您的映像副本的其他人。这大概看起来像

    FROM ubuntu:18.04 AS checkout
    ARG commit=master
    RUN apt-get update \
     && apt-get install --assume-yes --no-install-recommends \
          git-core \
          openssh-client
    COPY .ssh /root/.ssh
    RUN chmod 0400 /root/.ssh/*
    WORKDIR /app
    RUN git clone git@github.com:example/example \
     && cd example \
     && git checkout $commit
    
    FROM something
    WORKDIR /app
    COPY --from=checkout /app/example .
    ...
    

    即使这样,您也需要本地构建目录中的ssh密钥对(您必须手动复制)您需要小心,不要意外地将其复制到最终映像中。

    不能仅在
    docker compose.yml

    中指定这样的详细构建说明,当您在终端中运行
    哪个ssh
    ssh
    时会发生什么;是否安装了
    ssh
    ?@xarantolus/usr/bin/ssh@xarantolusssh工作得很好。我如何在docker-compose.yml系统中实现它?我想同时构建几个服务。您不能仅在
    docker compose.yml
    中指定这样的详细构建说明。如果您在本地签出了所有存储库,则可以使用
    build:../service-x
    之类的方法来构建各个映像。