2017-08-01 77 views
0

TL; DR - 如何运行(可能不安全)的docker注册表镜像并信任内容?镜像泊坞窗内容信任

我有一系列设备在没有互联网接入的封闭网络上运行码头集装箱。我可以临时附加一台以前可以访问网络的笔记本电脑。最终目标是更新这些设备正在运行的容器映像。

我可以原则上通过这一工作:

  1. 从互联网注册管理机构拉(泊坞集线器或私有)的笔记本电脑。
  2. 在笔记本电脑上运行注册表。
  3. 推到这个注册表与

    docker tag myorgname/trusttest:latest 
    laptophostname:80/myorgname/trusttest:latest 
    docker push laptophostname:80/myorgname/trusttest:latest 
    
  4. 从互联网上断开笔记本电脑和连接到封闭网络。
  5. 告诉设备做

    docker pull laptophostname:80/myorgname/trusttest:latest 
    docker tag laptophostname:80/myorgname/trusttest:latest 
    myorgname/trusttest:latest 
    

,并与新的图像(我这是怎么不是特别相关重启它们的容器,让我们只说我可以沟通laptophostname他们,他们做其余的)。

但是真正重要的是我得到它与Docker Content Trust(又名公证人)的合作。否则,任何人都可以连接到网络,并告诉设备开始运行任意代码。

我也可以在笔记本电脑上运行公证服务器,而且这种方式很好,除了当我从本地泊坞窗将新图像推送到笔记本电脑上的注册表(上面的第3步)时,它要求我提供新的签名密钥,即它为容器提供新的信任信息,而不仅仅是复制原始开发人员创建的信任。

目前我可以控制用于更新的机器(即笔记本电脑),但在未来这可能不是这种情况,所以我不希望在此有任何开发人员密钥。公证人称不安全的镜像是一种用例,那么如何让它与docker协同工作?

编辑

这可能是也可能不相关,但这个想法是,一个客户购买一个或一个以上这些设备的同时并将它们添加到分阶段网络。我需要一种提供已签名软件更新的方式,因此是编写应用程序以充当注册表镜像的原始计划。如果没有内容信任,就很容易欺骗设备运行任何图像。

+0

顺便说一句 - 我们的Markdown不是GitHub风格的,所以三重反引擎不会对内容进行格式化,而不是单个内容(它们唯一的区别是可以在其中使用文本单引号)。 –

回答

0

我建议你看看Docker群,因为你提到的许多事情都是由Docker群处理的。 https://docs.docker.com/engine/swarm/

特别是,您可以将笔记本电脑设置为swarm manager节点,这是唯一有权更新工作站节点上的容器的节点。

+0

这是一个有趣的想法,但与部署计划的其余部分无法兼容 - 客户购买这些设备并将其逐渐添加到网络中。经理几乎永远不会连接。 尽管如此,我不能控制用于更新的机器。如果我允许任何经理更新,那么我也有基本上允许任意代码在设备上运行的问题。这是我需要的开发人员签署的内容部分。 – Johnny5