在 Dockerfile 构建期间删除 $GNUPGHOME 错误

Remove $GNUPGHOME error during Dockerfile build

我在本地构建了 rabbitMQ alpine docker 镜像,查看完整 Dockerfile

RUN export GNUPGHOME="$(mktemp -d)" \
    && gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
    && gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \
    && rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc 

并且随机出现以下错误(主要是在 jenkins CI 系统中)

rm -rf /tmp/tmp.bBBnjn rabbitmq-server.tar.xz.asc
rm: can't remove '/tmp/tmp.bBBnjn/S.gpg-agent.extra': No such file or directory

rm -rf /tmp/tmp.GlfNBI rabbitmq-server.tar.xz.asc
rm: can't remove '/tmp/tmp.GlfNBI/S.gpg-agent.ssh': No such file or directory

看起来 gpg 代理在 rm 期间刚刚停止。 (删除时存在,删除时消失)

我使用Ubuntu 16.04 LTS 版本

$ docker info
Containers: 2
 Running: 2
 Paused: 0
 Stopped: 0
Images: 193
Server Version: 1.12.6
Storage Driver: overlay
 Backing Filesystem: extfs
Logging Driver: json-file
Cgroup Driver: cgroupfs
..

有什么解决办法吗?

将其更改为以下,它应该一直有效

export GNUPGHOME="$(mktemp -d)"; \
        gpg --keyserver pgp.mit.edu --recv-keys "$GPG_KEY" || \
        gpg --keyserver keyserver.pgp.com --recv-keys "$GPG_KEY" || \
        gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$GPG_KEY" ; \
    gpg --batch --verify rabbitmq-server.tar.xz.asc rabbitmq-server.tar.xz; \
    pkill -9 gpg-agent; \
    pkill -9 dirmngr; \
    rm -rf "$GNUPGHOME";

gpg-agentdirmngr 运行 在后台,有时需要时间才能存在。我相信 rm 会拾取这些进程的文件,并在它尝试删除守护进程和文件区域时已经消失。所以添加这两个 pkill 应该可以消除错误