在docker-compose build in flask项目中访问ssh键

时间:2017-11-03 12:06:46

标签: python docker flask ssh docker-compose

通常,我的问题是能够在docker-compose构建期间访问ssh密钥。

我在docker-compose.yml文件中使用volume mapping运行docker-compose时能够访问我的ssh键,如下所示:

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

但是我在docker-compose build

期间无法访问它们

更多细节

我正在运行一个python烧瓶应用程序。我想安装私有git repo作为pip包。所以我将这一行添加到requirements.txt

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

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

但是当我运行docker-compose build时,它无法访问私有git repo,因为它无法访问ssh密钥。

任何人都知道是否有办法为ssh密钥提供docker-compose构建访问权限,或者解决此问题的其他方法?

2 个答案:

答案 0 :(得分:4)

volumes附加在容器的运行时,而不是构建时

解决方案:

.ssh复制到Dockerfile旁边,然后在Dockerfile中执行以下操作:

COPY ./.ssh /root/.ssh

小心:

像这样,您的.ssh目录将可供有权访问您的Docker镜像的所有人使用。因此要么创建一个技术用户并将他的.ssh复制到图像中,或者(更好)做这样的事情:

FROM baseimage AS builder
COPY ./.ssh /root/.ssh
RUN your commands

FROM baseimage
COPY --from=builder some-directory some-directory

修改 另一种选择是使用username:password而不是ssh key authentication。这样,您可以在Dockerfile中使用build args,如:

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

构建它

答案 1 :(得分:-1)

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 repo的用户名和密码,但出于明显的安全原因,我建议您不要使用主git帐户。专门为此项目创建新用户,并授予他们访问权限。