在 Docker 中,git-lfs 给出错误:https://github.... 的凭据未找到
Posted
技术标签:
【中文标题】在 Docker 中,git-lfs 给出错误:https://github.... 的凭据未找到【英文标题】:In Docker, git-lfs giving error: credentials for https://github.... not found 【发布时间】:2018-12-04 11:47:18 【问题描述】:我正在尝试使用 git-lfs 从 git 将大文件拉入 Docker 容器。不幸的是,我不断收到错误消息:
...
---> f07e7087dc5a
Step 13/16 : RUN git lfs pull
---> Running in a387e389eebd
batch response: Git credentials for https://github.XXXX.edu/XXXXX/XXXXXXXXX.git not found.
error: failed to fetch some objects from 'https://github.XXXX.edu/XXXXX/XXXXXXXXX.git/info/lfs'
The command '/bin/sh -c git lfs pull' returned a non-zero code: 2
知道如何解决这个问题并让我的文件正确无误地提取吗?我在 Docker 中运行以下命令来尝试让 git-lfs 工作:
# Get git-lfs and pull down the large files
RUN apt-get update && apt-get install -y apt-utils && apt-get install -y curl
RUN curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash
RUN apt-get install -y git-lfs
RUN git lfs install
RUN git lfs pull
我也将我的.gitattributes
文件和.git
文件添加到 Docker 映像中。
编辑:我可以以某种方式使用:
https://you:password@github.com/you/example.git
或
git config remote.origin.url https://you:password@github.com/you/example.git
【问题讨论】:
您的编辑在正确的轨道上。您可以在pull
行之前尝试RUN git remote add origin https://you:password@github.com/you/example.git
。如果因为origin
已经存在而失败,那么您应该修改要复制到容器中的.git
文件。
【参考方案1】:
也许我可以使用
https://you:password@github.com/you/example.git
:
这是一种不好的做法,因为任何人在您构建的映像上执行 docker image history
都会取回这些凭据。
最好进行多阶段构建,如“Access Private Repositories from Your Dockerfile Without Leaving Behind Your SSH Keys”中所述。
它使用 SSH 密钥而不是用户名/密码,因为:
您可以生成并注册一个专用于您的 docker 构建的 SSH 密钥。 您可以随时撤消该密钥,因为它仅用于for this docker build
(与您无法轻易更改的凭据密码相反,而使用该密码可能会影响其他脚本)
你的 Dockerfile 看起来像:
# this is our first build stage, it will not persist in the final image
FROM ubuntu as intermediate
# install git
RUN apt-get update
RUN apt-get install -y git
# add credentials on build
ARG SSH_PRIVATE_KEY
RUN mkdir /root/.ssh/
RUN echo "$SSH_PRIVATE_KEY" > /root/.ssh/id_rsa
# make sure your domain is accepted
RUN touch /root/.ssh/known_hosts
RUN ssh-keyscan bitbucket.org >> /root/.ssh/known_hosts
RUN git clone git@bitbucket.org:your-user/your-repo.git
FROM ubuntu
# copy the repository form the previous image
COPY --from=intermediate /your-repo /srv/your-repo
# ... actually use the repo :)
【讨论】:
所以我改变了一些东西。即RUN ssh-keyscan github.mit.edu >> /root/.ssh/known_hosts
,然后还有RUN git clone https://github.mit.edu/user/users-repo.git
。但这是一个私有存储库,它是通过 github 的企业版,所以当我运行的时候,我得到了错误:Cloning into 'users-repo'... fatal: could not read Username for 'https://github.mit.edu': No such device or address
@agaidis 是的。这就是为什么我建议为该克隆创建一个专用的 SSH 密钥。使用 SSH URL:RUN gt clone git@github.mit.edu/user/users-repo.git
现在我得到:Cloning into 'users-repo'... Warning: Permanently added the ECDSA host key for IP address 'xx.x.xx.xx' to the list of known hosts. @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ Permissions 0644 for '/root/.ssh/id_rsa' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. Load key "/root/.ssh/id_rsa": bad permissions git@github.mit.edu: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
我是否想做类似RUN chmod 400 ~/.ssh/id_rsa
之类的事情,就像在这个 *** 帖子中看到的那样? ***.com/questions/29933918/…
@agaidis 确实是:权限需要足够严格才能使 SSH 正常工作。我通常使用***.com/a/37626619/6309以上是关于在 Docker 中,git-lfs 给出错误:https://github.... 的凭据未找到的主要内容,如果未能解决你的问题,请参考以下文章