Dockerfile:当 运行 ssh-agent on /tmp 时,构建期间权限被拒绝

Dockerfile: Permission denied during build when running ssh-agent on /tmp

所以我正在尝试创建一个映像,它将 SSH 私钥添加到 /tmp,在其上运行 ssh-agent,进行 git 克隆,然后再次删除该密钥。

This is the idea I'm trying to accomplish

Docker文件:

FROM node:4.2.4
MAINTAINER Me

CMD ["/bin/bash"]

ENV GIT_SSL_NO_VERIFY=1
ENV https_proxy="httpsproxy"
ENV http_proxy="httpproxy"
ENV no_proxy="exceptions"

ADD projectfolder/key /tmp/
RUN ssh-agent /tmp

WORKDIR /usr/src/app

RUN git clone git@gitlab.private.address:something/target.git

RUN rm /tmp/key

WORKDIR /usr/src/app/target

RUN npm install

EXPOSE 3001

现在问题出在构建过程中。我使用以下命令来构建:

docker build -t samprog/targetimage:4.2.4 -f projectfolder/dockerfile .

直到“ADD projectfolder/key /tmp/”的层工作得很好,尽管“运行 ssh-agent /tmp”层不想合作。

错误代码:

Step 9 : RUN ssh-agent /tmp/temp
 ---> Running in d2ed7c8870ae
/tmp: Permission denied
The command '/bin/sh -c ssh-agent /tmp' returned a non-zero code: 1

有什么想法吗?因为我认为这是一个权限问题,目录已经由父图像创建,所以我创建了一个 /tmp/temp 并将密钥放在那里。也不行,同样的错误。

我在 SLES12 SP1

上使用 Docker 版本 1.10.3

我做到了。我所做的是,我摆脱了 ssh-agent。我只是将我的 docker-host 的 ~/.ssh- 目录复制到图像的 /root/.ssh 中并且它起作用了。

但是不要使用 ~,首先复制项目文件夹中的 ~/.ssh 目录,然后复制容器中的 docker 文件。

最终 docker 文件如下所示:

FROM node:4.2.4
MAINTAINER me

CMD["/bin/bash"]

ENV GIT_SSL_NO_VERIFY=1
ENV https_proxy="httpsproxy"
ENV http_proxy="httpproxy"
ENV no_proxy="exceptions"

ADD projectfolder/.ssh /root/.ssh

WORKDIR /usr/src/app

RUN git clone git@gitlab.private.address:something/target.git

RUN rm -r /root/.ssh

WORKDIR /urs/src/app/target

RUN npm set registry http://local-npm-registry
RUN npm install

EXPOSE 3001

docker文件在效率和其他方面仍有待改进,但它有效!尤里卡!

图像现在必须被压缩,它应该可以安全使用,尽管我们只在我们的本地注册表中使用它。

我遇到了与 maven:3-alpine 相同的问题。当我正确安装 openssh-client:

时就解决了
RUN apk --update add openssh-client

然后将已知主机的密钥复制到映像中:

ADD id_rsa /root/.ssh/
ADD id_rsa.pub /root/.ssh/
ADD known_hosts /root/.ssh/

和运行 git 内联克隆命令(使用 ssh-agent 和 ssh-add):

RUN eval $(ssh-agent -s) \
  && ssh-add \
  && git clone ssh://git@private.address:port/project/project.git

完成 docker 文件:

FROM maven:3-alpine
RUN apk update
RUN apk add python
RUN apk add ansible
RUN apk add git
RUN apk --update add openssh-client

ADD id_rsa /root/.ssh/
ADD id_rsa.pub /root/.ssh/
ADD known_hosts /root/.ssh/

RUN eval $(ssh-agent -s) \
  && ssh-add \
  && git clone ssh://git@private.address:port/project/project.git

ADD hosts /etc/ansible/hosts
RUN ansible all -m ping --ask-pass

我在构建我的 Dockerfile 时执行任何 bash 命令时遇到了同样的问题。 我通过添加 RUN chmod -R 777 ./ 解决了这个 question 的答案中的建议。我认为这是一种解决方法,我不确定为什么 ubuntu 中的 docker 在构建容器时存在权限问题。