我需要将一个apt存储库停靠.其中的包需要签名,目前已完成
恰当地发布snapshot -distribution =“stable”-gpg-key =“< key id>”我的快照
在此之前,需要使用gpg –gen-key创建密钥.
但这样私有密钥将在docker镜像内部创建,这似乎不是一个好习惯.此外,id甚至不起作用;运行gpg –gen-key –batch< gpg.in卡住:
Not enough random bytes available. Please do some other work to give
the OS a chance to collect more entropy! (Need 284 more bytes)
我不知道是否甚至可以在docker容器中生成一个gpg密钥,即使它是,也可能不是一个好主意.
有没有办法通过外部密钥签署回购的内容?
Docker不提供虚拟/ dev / [u]随机设备.如果容器中没有足够的熵,则主机上没有足够的熵.
检查/ proc / sys / kernel / random / entropy_avail的内容,它们在Docker主机和容器上应该几乎相同(如果数量略有不同,它只是经常更改,否则重新检查几次).
可能的原因:
>在虚拟机中运行docker主机,例如由于boot2docker或自构造的虚拟机.只需确保在虚拟机中获得更多的熵,对于开发人员机器而言,hasgd是一个非常简单的解决方案,但可能不适合生产.
>另一个容器/应用程序正在耗尽所有熵.实现哪一个并中断/终止它,或生成更多的熵.
>你通常没有足够的熵.做一些工作(鼠标/键盘移动,(硬)磁盘I / O).
外部生成密钥对
无论如何,在真实机器上生成密钥并且仅将(私有)子密钥移动到服务器可能更合理.这样,您可以不时地交换子密钥(如果它被泄露).阅读What is a good general purpose GnuPG key setup?,了解设置OpenPGP密钥时要考虑的不同事项.
在构建Docker镜像时,使用COPY将文件放入机器,然后使用gpg – 在Dockerfile中导入它.之后,它的使用方式与使用gpg –gen-key在容器内生成它的方式完全相同.