Dockerfile:在/tmp上运行ssh-agent时,在构建过程中拒绝权限



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

这就是我想要实现的想法

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 .

添加项目文件夹/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版本

我做到了。我所做的是,我摆脱了那个女特工。我只是将docker-host的~/.ssh -目录复制到镜像的/root/.ssh目录中,它就工作了。

不要使用~,先复制~/.ssh -目录在projectfolder,然后与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仍然需要提高效率和东西,但它工作!尤里卡!

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

我在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 inline命令(使用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 ./来解决。我认为这是一个变通办法,我不确定为什么docker在ubuntu中有权限问题时,建立一个容器

最新更新