所以我试图创建一个图像,它将一个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
答案 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 在构建容器时会出现权限问题。