Docker构建镜像时执行gpg --list-keys进程挂起问题求助
解决Docker构建中gpg --import挂起的问题
问题原因
Docker构建阶段的RUN指令运行在无TTY的非交互式环境中,而Alpine的gnupg在执行--import时,默认会尝试等待用户确认密钥信任操作,没有交互输入就会一直挂起。手动进入容器时是交互式终端,有TTY支持,所以命令能正常执行。
解决方案
给gpg --import添加--batch参数,强制命令在非交互式模式下运行,跳过所有需要用户输入的步骤:
修正后的Dockerfile:
FROM alpine:3 COPY public.asc / RUN apk add --no-cache gnupg openssh && ssh-keygen -A && mkdir /root/.ssh COPY entrypoint.sh / # 用--batch参数避免交互式等待 RUN gpg --batch --import /public.asc ENTRYPOINT ["/entrypoint.sh"] EXPOSE 22/tcp
如果需要自动信任导入的密钥,可追加--trust-model always参数:
RUN gpg --batch --trust-model always --import /public.asc
补充说明
这不是对Docker构建逻辑的误解,只是忽略了gpg命令的交互式特性。Docker的RUN、CMD等指令默认都在非交互式环境执行,所有需要用户输入的命令都需显式添加非交互式参数才能正常运行。
内容的提问来源于stack exchange,提问作者Remi
相关产品推荐
相关产品推荐

