【发布时间】:2017-11-29 02:56:09
【问题描述】:
我的用例是我有多个使用相同中间件的 express 微服务,我想为每个中间件创建一个 npm 模块格式的不同 repo。
每个 repo 都是一个私有 repo,并且可以附加一个部署密钥(可以是不同的密钥或相同的密钥)
所有这些在本地都可以正常工作。但是,当我尝试将它与我的 docker-compose 设置一起使用时,它在构建阶段的 npm install 步骤中失败。
Dockerfile
FROM node:alpine
RUN npm install --production
CMD npm start
docker-compose.yml
services:
node-api:
build:
context: .
dockerfile: Dockerfile
我知道这不起作用,因为我没有在 Docker 上下文中的本地系统上使用的部署密钥。
我已经四处寻找解决方案,但没有一个看起来很简单/非 hacky
复制密钥并压缩(缺点:不确定我如何在 docker-compose 文件中执行此操作)http://blog.cloud66.com/pulling-git-into-a-docker-image-without-leaving-ssh-keys-behind/
在构建步骤中复制密钥并添加到映像。 (缺点:不是很安全:()
使用密钥作为构建参数。 (缺点:见 2)
Dockerise 之类的 https://www.vaultproject.io/ 首先运行它,添加密钥并在节点容器中使用它来获取最新密钥。 (缺点:可能工作量很大,可能还有其他问题?)
-
使用 Docker secrets 和 docker stack deploy 并将密钥存储在 docker secrets 中(缺点:docker stack deploy 尚不支持 docker 卷。请参阅此处https://docs.docker.com/compose/bundles/#producing-a-bundle unsupported key 'volumes')
我的问题是最安全可能的自动化解决方案是什么(文件用户的手动步骤最少)?实施的时间不是问题。我试图避免签入任何敏感数据,同时让其他人可以轻松地在本地运行。
【问题讨论】:
-
第五点,
no support for volumes yet是什么意思?因为这里:docs.docker.com/engine/swarm/secrets/#use-secrets-in-compose 看起来他们创建了卷 -
应该更具体一些,我的意思是在我的撰写文件中,我使用 docker volumes docs.docker.com/engine/tutorials/dockervolumes 让容器保留数据库文件等内容。我可以将机密放入撰写中,但尚不支持卷.
-
不知道你是不是这个意思:docs.docker.com/compose/compose-file/…?还是别的什么?
-
docs.docker.com/compose/bundles/#producing-a-bundle 我正在为 docker stack deploy 创建一个捆绑包(这样我就可以使用这些秘密),当我创建它时我收到消息 unsupported key 'volumes',我相信你可以设置堆栈中的卷,而不是通过撰写文件
-
所以你想要一个捆绑包中的堆栈,因为 docker 堆栈支持卷和其他东西(如github.com/docker/labs/blob/master/beginner/chapters/…)
标签: docker