我想为devs创建一个复制我们的生产服务器的Docker映像。这些服务器是由Ansible配置的。
我的想法是运行一个ansible-pull来应用容器内的所有配置。问题是我需要SSH键来提取剧本,但是我不想共享Docker映像上的SSH键。
因此,有一种方法可以在构建时不让SSH键在运行时使用?
发布于 2016-09-20 14:22:52
问得好。这样做的简单方法是在构建中的Ansible stuff之后移除SSH键,但是因为Docker将图像存储为层,所以仍然可以找到包含键的旧层。
如果您构建这个Dockerfile:
FROM ubuntu
COPY ansible-ssh-key.rsa /key.rsa
RUN [ansible stuff]
RUN rm /key.rsa最后的映像将拥有所有的不可访问状态,SSH键将消失为,但是有人可以轻松地运行docker history来查看所有图像层,只需在删除密钥之前从中间层启动容器,并获取密钥。
诀窍是这样做,然后使用贾森·怀尔德( Jason Wilder)的壁球对接工具来压缩最终图像。在压缩图像中,中间层消失了,无法获取已删除的键。
发布于 2016-09-20 19:33:41
我会设置一些本地文件服务工具,只在您的构建环境中可用。
例如,启动构建主机上的lighttpd,只向本地客户端提供您的pem文件。
在您的Dockerfile中,请在一次运行中添加/拉/清除:
RUN curl -sO http://build-host:8888/key.pem && ansible-pull -U myrepo && rm -rf key.pem在这种情况下,它应该在一个层中完成,所以不应该在层提交后留下key.pem的痕迹。
发布于 2017-09-17 11:42:38
这是另一个解决方案,使用这个回购,船坞/金库,秘密商店将用于码头形象建设。
我创建了一个服务文档/金库和Ubuntu映像,在其中我将我的私钥附加到卷,并将其作为一个进程运行,
docker run -it -v ~/.ssh:/vault/.ssh ubuntu /bin/bash -c "echo mysupersecret > /vault/.ssh/key"
docker run -d -p 14242:3000 -v ~/.ssh:/vault/.ssh dockito/vault这是我的Dockerfile
FROM ubuntu:14.04
RUN apt-get update -y && \
apt-get install -y curl && \
curl -L $(ip route|awk '/default/{print $3}'):14242/ONVAULT >
/usr/local
/bin/ONVAULT && \
chmod +x /usr/local/bin/ONVAULT
ENV REV_BREAK_CACHE=1
RUN ONVAULT echo ENV: && env && echo TOKEN ENV && echo $TOKEN
RUN ONVAULT ls -lha ~/.ssh/
RUN ONVAULT cat ~/.ssh/key您可以使用高寒linux来减少最终构建大小,并将映像构建为,
docker build -f Dockerfile -t mohan08p/VaultTest . 你就完蛋了。你可以检查图像。机密没有存储在图像中,因为它是空的。
docker run -it mohan08p/VaultTest ls /root/.ssh这是在构建时传递.ssh的好方法。唯一的缺点是我需要保持额外的Vault服务运行。
https://stackoverflow.com/questions/39596040
复制相似问题