TL;DR - 我如何运行(可能不安全的)docker 注册表镜像并信任内容?
我有一系列设备在没有互联网访问的封闭网络上运行 docker 容器。我可以临时连接一台以前可以访问网络的笔记本电脑。最终目标是更新每个设备正在运行的容器镜像。
我可以通过以下方式原则上使其工作:
- 从 Internet 注册表(Docker 集线器或私有)拉取到笔记本电脑。
- 在笔记本电脑上运行注册表。
推送到这个注册表
docker tag myorgname/trusttest:latest laptophostname:80/myorgname/trusttest:latest docker push laptophostname:80/myorgname/trusttest:latest
- 断开笔记本电脑与互联网的连接并连接到封闭的网络。
告诉设备做一个
docker pull laptophostname:80/myorgname/trusttest:latest docker tag laptophostname:80/myorgname/trusttest:latest myorgname/trusttest:latest
并使用新图像重新启动他们的容器(我如何做到这一点并不是特别相关,假设我可以laptophostname
与他们交流,其余的由他们完成)。
但真正重要的是我让它与 Docker Content Trust(又名 Notary)一起工作。否则任何人都可以连接到网络并告诉设备开始运行任意代码。
我也可以在笔记本电脑上运行公证服务器,这工作正常,除了当我将更新的图像从本地 docker 推送到笔记本电脑上的注册表时(上面的第 3 步),它要求我提供新的签名密钥,即它正在给容器新的信任信息而不是仅仅复制原始开发者创建的信任。
目前我可以控制用于进行更新的机器(即笔记本电脑),但将来可能不是这样,所以我不想在这上面有任何开发人员密钥。公证人宣传不安全的镜像是一个用例,那么我如何让它与 docker 一起使用?
编辑
这可能相关也可能不相关,但其想法是客户一次购买一个或多个这些设备,并分阶段将它们添加到网络中。我需要一种提供签名软件更新的方法,因此最初计划编写一个应用程序来充当注册表镜像。如果没有内容信任,很容易欺骗设备运行任何图像。