Dockerfile中安装Git失败

61

我正在进行docker构建,同时尝试拉取我正在工作的存储库,因此我遵循了这个教程并在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 \
    apt-get upgrade \
    apt-get install git

# add credentials on build
RUN mkdir ~/.ssh && ln -s /run/secrets/host_ssh_key ~/.ssh/id_rsa

# make sure your domain is accepted
RUN touch /root/.ssh/known_hosts
RUN ssh-keyscan github.org >> /root/.ssh/known_hosts

RUN git clone git@github.com:my-repo/myproject.git

FROM ubuntu
# copy the repository form the previous image
COPY --from=intermediate /your-repo /srv/your-repo
在我的docker-compose.yml文件中我添加了。
secrets:
  host_ssh_key:
    file: ~/.ssh/id_rsa

我正在添加

secrets:
  - host_ssh_key

在其中一项服务中。

由于这只是为了我的本地使用(我不打算部署或将其用于生产,我只想测试它),因此以这种方式使用是可以的 - 如果它能正常工作,因为目前构建失败了,在安装 git 的阶段出现错误

E:更新命令不接受任何参数

错误:服务“web”构建失败:命令“/ bin / sh -c apt-get update apt-get upgrade apt-get install git”返回非零代码:100

我错过了什么?


你能否采纳一个答案呢?这样可以向他人表明某个解决方案对你有所帮助。如果你在所有得到答案的问题上都这样做,那就太好了。 - Kevin Kopf
当然,虽然最终我用了不同的方法。感谢你的帮助 :) - dingo_d
是的,对于本地环境来说没问题,实际上作为开发服务器也不是一个糟糕的想法(但不适用于暂存或生产环境!!!) - Shayne
3个回答

128

你在过度分析这个问题。这只是一个简单的打字错误。应该是:

RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y git

这些是三个不同的命令。


1
仍然出现The command '/bin/sh -c apt-get update && apt-get upgrade && apt-get install git' returned a non-zero code: 1错误。 - dingo_d
这是另一个问题,现在apt-get install正在等待您提交安装。因此,在“install”之后应添加“-y”。从您的错别字来看,我觉得您不知道如何使用Linux。也许您应该阅读有关apt-get的所有内容? - Kevin Kopf
我会尝试使用标志,但总的来说,我可能会在构建过程中跳过git克隆。至少这就是devops正在做的事情。我只是在测试docker,这不是我的主要专业领域:D - dingo_d
8
在 node:alpine 中: RUN apk update &&
apk upgrade &&
apk add git
- itzhar
在安装git后运行update。尝试以下命令: RUN apt-get install --assume-yes git && apt-get update && apt-get clean all - Zhivko.Kostadinov

19

对于使用alpine镜像的开发者来说,RUN apk add --no-cache git对我很有效。


1
谢谢,这节省了我们一些时间。请问为什么您使用了“--no-cache”? - Trapcode

13

一些想法:

    1. apt-get install git替换为apt-get install --assume-yes git。如果没有使用 --assume-yes,它会提示你进行确认,但你无法给出确认并且它将聪明地推断出您的意思是“NO”。
    1. 您已经添加了ssh密钥,但您是否确认其权限为0600。我建议您直接复制并明确运行chmod 0600 ~/.ssh/id_rsa以确保权限正确。

总体而言,您的Dockerfile看起来非常聪明,我从中获得了一些新的想法。


1
刚刚看了教程,非常好。他们使用了-y开关,而我使用了--assume-yes开关。它们是同义词,我认为这就是你所缺少的。如果你提供了一个有效的“id_rsa”文件,那么我的第二点就不适用了。 - emory
你对问题的编辑应该被撤销,因为它明显与作者的意图相冲突。 - Kevin Kopf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接