Dockerfile:在/ tmp上运行ssh-agent时,在构建期间拒绝权限

时间:2016-10-07 15:09:16

标签: docker build permissions dockerfile ssh-agent

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

This is the idea I'm trying to accomplish

Dockerfile:

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

3 个答案:

答案 0 :(得分:4)

我做到了。我做的是,我摆脱了ssh-agent。我只是将docker-host的~/.ssh - 目录复制到图像的/root/.ssh中,然后就可以了。

不要使用~,首先复制项目文件夹中的~/.ssh - 目录,然后将容器内的dockerfile复制。

最终的dockerfile如下所示:

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

dockerfile仍需要在效率和内容方面进行改进,但它确实有效!尤里卡!

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

答案 1 :(得分:0)

我在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 clone命令(使用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

答案 2 :(得分:0)

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