在 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-agent
和 dirmngr
运行 在后台,有时需要时间才能存在。我相信 rm
会拾取这些进程的文件,并在它尝试删除守护进程和文件区域时已经消失。所以添加这两个 pkill 应该可以消除错误
我在本地构建了 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-agent
和 dirmngr
运行 在后台,有时需要时间才能存在。我相信 rm
会拾取这些进程的文件,并在它尝试删除守护进程和文件区域时已经消失。所以添加这两个 pkill 应该可以消除错误