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

时间:2017-08-24 08:01:09

标签: docker dockerfile gnupg

我在本地构建了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
..

对此有何解决方案?

1 个答案:

答案 0 :(得分:4)

将其更改为下方,它应该始终有效

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应该删除错误

HTOP