在docker-compose build flask项目中访问ssh密钥

一般来说,我的问题是关于在docker-compose构build期间能够访问ssh密钥。

在Docker-compose.yml文件中使用卷映射运行docker-compose时,我可以访问我的ssh密钥,如下所示:

services: flask: volumes: - ~/.ssh:/root/.ssh 

但是在docker-compose构build中我无法访问它们

更具体的

我正在运行一个python烧瓶应用程序。 我想安装一个私人的git回购作为一个点子包。 所以我将这一行添加到requirements.txt

 git+ssh://git@github.com/username/repo_name.git@branch_name 

如果我通过docker-compose run flask bash在服务中docker-compose run flask bash那么我可以手动运行pip install git+ssh://git@github.com/username/repo_name.git@branch_name ,那可以,因为我有卷映射到ssh密钥。

但是当我运行docker-compose build时,它不能访问私有的git repo,因为它没有权限访问ssh密钥。

任何人都知道是否有一种方法来给docker-compose编译访问ssh密钥,或者解决这个问题的另一种方法?

volumes运行时连接到容器,而不是在构build时

解:

将你的.ssh复制到Dockerfile旁边,在Dockerfile执行以下Dockerfile

 COPY ./.ssh /root/.ssh 

小心:

像这样,您的.ssh目录将可用于有权访问您的Docker映像的所有人。 因此,要么创build一个技术用户,并将他的.ssh复制到图像中,或者(更好地)执行如下操作:

 FROM baseimage AS builder COPY ./.ssh /root/.ssh RUN your commands FROM baseimage COPY --from=builder some-directory some-directory 

编辑:另一个select是使用用户名:密码,而不是ssh密钥authentication。 这样,你可以在Dockerfile中使用构build参数,如下所示:

 FROM baseimage ARG GIT_USER ARG GIT_PASS RUN git clone http://${GIT_USER}:${GIT_PASS}@your-git-url.git 

并用args docker build --build-args GIT_USER=<user> --build-args GIT_PASS=<pass> .

ssh比使用用户名:密码更难以设置。 这是我添加到requirements.txt的行,它使它工作:

 -e git+https://<username>:<password>@github.com/<path to git repo>.git#egg=<package_name> 

如果你想得到一个特定的标签,那么你可以这样做:

 -e git+https://<username>:<password>@github.com/<path to git repo>.git@<tag_name>#egg=<package_name> 

你可以使用任何可以访问git仓库的用户名和密码,但是我build议你不要使用主要的git账户,这是出于安全原因。 创build一个新的用户专门为这个项目,并授予他们访问权限。