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 在构建容器时存在权限问题。
所以我正在尝试创建一个映像,它将 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 在构建容器时存在权限问题。