【问题标题】:Access ssh keys during docker-compose build in flask project在烧瓶项目中的 docker-compose 构建期间访问 ssh 密钥
【发布时间】:2018-04-16 03:56:39
【问题描述】:

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

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

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

但在 docker-compose build 期间我无法访问它们

更多细节

我正在运行一个 python 烧瓶应用程序。我想将私有 git 存储库安装为 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 存储库,因为它无法访问 ssh 密钥。

任何人都知道是否有办法让 docker-compose build 访问 ssh 密钥,或其他解决此问题的方法?

【问题讨论】:

    标签: python docker flask ssh docker-compose


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

    【讨论】:

      【解决方案2】:

      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
      

      编辑: 另一种选择是使用用户名:密码而不是 ssh 密钥身份验证。这样,您将在 Dockerfile 中使用构建参数,例如:

      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=&lt;user&gt; --build-args GIT_PASS=&lt;pass&gt; . 构建它

      【讨论】:

      • 非常感谢您的回答。它帮助了一点,但它仍然没有工作。它适用于我自己的个人 ssh 密钥。但我不想将它们推送到 github,所以我创建了一个新的 github 用户并授予他们对 repo 的访问权限。但它不适用于这个新用户的密钥。其他一切都完全相同。我的密钥,它可以工作,新的用户密钥,它不起作用。有任何想法吗? docker-compose build 在哪里寻找 ssh 密钥,是否有 ssh-agent? (我一个都看不到)
      • 我不知道你的整个场景:它是私有还是公共 github repo?谁能建立形象?但我建议将您的 .ssh 添加到您的 .gitignore 并在您的 README.md 中添加一个提示,即无论谁想要构建图像,都必须将他的 ssh 密钥放入特定的文件夹中。另请参阅我对答案的编辑。
      猜你喜欢
      • 2020-01-22
      • 1970-01-01
      • 2021-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-28
      • 2019-07-17
      相关资源
      最近更新 更多