Docker 用于构建服务的GitHub存储库
我必须使用私有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 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
问题
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
之类的方法来构建各个映像。