将SSH作为parameter passing给剧本

我有Dockerfile:

FROM ubuntu:16.04 ARG ssh_prv_key ARG ssh_pub_key RUN apt-get update && \ apt-get install ... USUAL INSTALL STUFF ... WORKDIR /app/ CMD git clone MY_REPO 

我build立这样的形象:

 $ docker build -t example --build-arg ssh_prv_key="$(cat ~/.ssh/id_rsa)" --build-arg ssh_pub_key="$(cat ~/.ssh/id_rsa.pub)" . 

当我从这个图像创build容器时,它会自动拉取git-repo,并使用-v参数将其保存在主机上,并使用--rm

当我尝试使用可靠的docker_image模块做同样的事情时,问题就开始了。

剧本看起来像这样:

 --- - hosts: localhost environment: PYTHONPATH: /usr/local/lib/python2.7/site-packages/ tasks: - name: create image from Dockerfile docker_image: path: /home/demaunt/Jun/dock_click dockerfile: biba.dockerfile name: myimage buildargs: ssh_pub_key: '{{ pub }}' ssh_prv_key: '{{ pvt }}' 

我是这样开始的:

 ansible-playbook bibansible.yml --extra-vars "pub=$(cat ~/.ssh/id_rsa.pub) pvt=$(cat ~/.ssh/id_rsa)" 

图像是成功build立的,但是当运行容器时,我得到权限错误(publickey)。 我也尝试将parameter passing到.yml文件中,如下所示:

 --- - hosts: localhost environment: PYTHONPATH: /usr/local/lib/python2.7/site-packages/ tasks: - name: create image from Dockerfile docker_image: path: /home/demaunt/Jun/dock_click dockerfile: biba.dockerfile name: myimage buildargs: ssh_pub_key: command: cat ~/.ssh/id_rsa.pub ssh_prv_key: command: cat ~/.ssh/id_rsa 

PS我明白,将SSH密钥传递到图像不是最好的select,但它是可以接受的临时解决scheme。

你不能在这个级别使用command
但要获取本地文件的内容,请查看lookup

 [...] buildargs: ssh_pub_key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}" ssh_prv_key: "{{ lookup('file', '~/.ssh/id_rsa') }}"