Docker:通过参数共享私钥
我想将我的github私钥共享到docker容器中 我正在考虑通过ARGs通过docker-compose.yml共享它 是否可以按此处所述使用ARG共享私钥? 然后我希望在我的Docker:通过参数共享私钥,docker,docker-compose,dockerfile,ssh-keys,Docker,Docker Compose,Dockerfile,Ssh Keys,我想将我的github私钥共享到docker容器中 我正在考虑通过ARGs通过docker-compose.yml共享它 是否可以按此处所述使用ARG共享私钥? 然后我希望在我的Dockerfile中使用它: ARG PRIVATE_KEY RUN echo $PRIVATE_KEY >> ~/.ssh/id_rsa RUN pip install git+ssh://git@github.com/... 可以通过ARGs吗?如果可以使用最新的docker 1.13(或17.0
Dockerfile
中使用它:
ARG PRIVATE_KEY
RUN echo $PRIVATE_KEY >> ~/.ssh/id_rsa
RUN pip install git+ssh://git@github.com/...
可以通过ARGs吗?如果可以使用最新的docker 1.13(或17.03 ce),则可以使用docker swarm机密:请参阅“” 允许您将机密关联到要启动的容器:
docker service create --name test \
--secret my_secret \
--restart-condition none \
alpine cat /run/secrets/my_secret
如果docker swarm不是您的选择,您可以尝试设置一个 见“”。但这可能不适用于私有ssh密钥
您可以使用独立的机密管理器检查“”中的其他相关选项,如。尽管
ARG
本身不会保留在生成的映像中,但当您引用Dockerfile中某个位置的ARG
变量时,该变量将出现在历史记录中:
FROM busybox
ARG SECRET
RUN set -uex; \
echo "$SECRET" > /root/.ssh/id_rsa; \
do_deploy_work; \
rm /root/.ssh/id_rsa
因为现在有了swarm功能来存储和管理机密,但这并不能解决构建时的问题
建立
Docker~1.14(或任何等效的新发行版名称)应该是(也)允许您在构建期间装载机密文件的版本
同时,解决方案之一是在某个地方运行网络服务,您可以在构建期间使用客户端从中提取机密。然后,如果构建将机密放入一个文件中,如~/.ssh/id\u rsa
,则必须在创建该文件的运行
步骤完成之前删除该文件
我见过的最简单的解决方案是使用nc
提供文件:
docker network create build
docker run --name=secret \
--net=build \
--detach \
-v ~/.ssh/id_rsa:/id_rsa \
busybox \
sh -c 'nc -lp 8000 < /id_rsa'
docker build --network=build .
项目
有许多实用程序都有相同的前提,但复杂程度/功能各不相同。有些是通用解决方案,如Hashicorps Vault
docker network create build
docker run --name=secret \
--net=build \
--detach \
-v ~/.ssh/id_rsa:/id_rsa \
busybox \
sh -c 'nc -lp 8000 < /id_rsa'
docker build --network=build .
FROM busybox
RUN set -uex; \
nc secret 8000 > /id_rsa; \
cat /id_rsa; \
rm /id_rsa