Missing Entropy
Docker does not provide a virtual /dev/[u]random
devices. If you haven't got enough entropy in the container, you haven't got enough entropy on the host.
Check the contents of /proc/sys/kernel/random/entropy_avail
, they should be pretty much the same on both the Docker host and container (if the number is slightly different, it just changes very frequently, otherwise recheck a few times).
Possible reasons:
- Running the docker host in a virtual machine, for example because of
boot2docker
or a self-constructed virtual machine. Just make sure to get more entropy inside your virtual machine, havegd
is a very easy solution for a developer machine, but might not be appropriate for production.
- Another container/application is using up all entropy. Realize which one and interrupt/terminate it, or generate more entropy.
- You're generally not having enough entropy. Do some work (mouse/keyboard movements, (hard) disk I/O).
Externally Generating a Key Pair
Anyway, it might be more reasonable to generate a key on a real machine, and only move a (private) subkey to the server. This way, you can exchange the subkey every now and then (and in case it was compromised). Read What is a good general purpose GnuPG key setup? for an introduction to different things to consider while setting up OpenPGP keys.
While building the Docker image, use COPY
to get the file into the machine, and then gpg --import
it in the Dockerfile. Afterwards, it is available exactly the same way it would've been if you generated it inside the container using gpg --gen-key
.