在 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.... 的凭据未找到的主要内容,如果未能解决你的问题,请参考以下文章

Grails clean 命令在 Ubuntu docker 容器中给出错误

docker上的Mysql给出“连接被拒绝”错误

git-lfs使用

NSHost 在设备中运行会给出 NSHost.h 错误

git-lfs 离线安装

git-lfs 离线安装