我需要对apt存储库进行docker化。其中的包需要签名,目前已完成
aptly publish snapshot -distribution="stable" -gpg-key="<key id>" my-snapshot
在此之前,需要使用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密钥,即使它是,也可能不是一个好主意。
有没有办法通过外部密钥签署回购的内容?
答案 0 :(得分:3)
Docker 不提供虚拟/dev/[u]random
设备。如果你的容器中没有足够的熵,你就没有足够的熵。
检查/proc/sys/kernel/random/entropy_avail
的内容,它们在Docker主机和容器上应该几乎相同(如果数量略有不同,它只是经常更改,否则重新检查几次)。
可能的原因:
boot2docker
或自构造的虚拟机。只需确保在虚拟机中获得更多熵,havegd
对于开发人员计算机来说是一个非常简单的解决方案,但可能不适合生产。无论如何,在真实机器上生成密钥并且仅将(私有)子密钥移动到服务器可能更合理。这样,您可以不时地交换子密钥(以防它被泄露)。阅读What is a good general purpose GnuPG key setup?,了解设置OpenPGP密钥时需要考虑的不同事项。
在构建Docker镜像时,使用COPY
将文件放入计算机,然后在Dockerfile中gpg --import
。之后,如果您使用gpg --gen-key
在容器内生成它,它的完全相同。
答案 1 :(得分:2)
我设法通过在连接到生成gpg
密钥的docker容器时ping某些网站来大大加快熵的生成。
$ docker exec -it blimp_mailpilekermit_1 bash
mailpile@mailpile-kermit:~$ ping google.com &
mailpile@mailpile-kermit:~$ ping cloudfleet.io &
mailpile@mailpile-kermit:~$ cat /proc/sys/kernel/random/entropy_avail
757
这使得gpg
进程能够相对快速地完成生成2048位密钥。
答案 2 :(得分:1)
在与docker build
相同的目录树中生成Dockerfile
之外的密钥。然后,您可以ADD
图片的关键字,aptly
即可使用。请记住,此图像现在包含一个私有GPG密钥,因此它需要像保存密钥一样保密。
如果要在正在运行的容器中使用密钥(而不是在构建映像时),请使用-v
标志将密钥文件装入映像中。 (这使您可以在不发布私钥的情况下发布图像。
答案 3 :(得分:0)
泛洪ping外部接口(来自其他主机)也会将熵添加到池中。
例如。 ping -f $ EXTERNALIP
需要成为root用户,最好不要在您关心的网络中执行此操作。