我有以下 Dockerfile:
FROM ubuntu:22.04
# Step 1
RUN apt update && apt install -y wget
# Step 2
# All your persistent configs are in /root.
RUN mkdir -p /root/.symlinks/etc \
&& mv /etc/alternatives /root/.symlinks/etc/alternatives \
&& ln -sf /root/.symlinks/etc/alternatives /etc/alternatives
# Step 3
RUN wget -O /usr/share/keyrings/xpra.asc https://xpra.org/gpg.asc \
&& wget -P /etc/apt/sources.list.d https://raw.githubusercontent.com/Xpra-org/xpra/master/packaging/repos/jammy/xpra.sources
# Step 4
RUN apt update
在步骤 2 中,我更改/etc/alternatives
为另一个目录的符号链接,在步骤 3 中,我安装了一个名为的程序xpra
,然后在步骤 4 中运行了apt update
。最后,步骤 4 失败并出现以下错误:
RUN apt update
Get:6 https://xpra.org jammy InRelease [4096 B]
Err:6 https://xpra.org jammy InRelease
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 18ADB31CF18AD6BB
Reading package lists...
W: GPG error: https://xpra.org jammy InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 18ADB31CF18AD6BB
E: The repository 'https://xpra.org jammy InRelease' is not signed.
但是如果我省略步骤 2(即更改/etc/alternatives
为符号链接),那么步骤 4 就可以正常工作。
为什么/etc/alternatives
符号链接会产生影响apt
?
答案1
问题似乎是因为/root
没有x
为其他用户设置位。它是drwx------
。因此apt update
,在 期间,一定是非 root 用户尝试从 执行文件/etc/alternatives
(实际上是/root/.symlinks/etc/alternatives
)并且无法进入,/root
因为/root
没有x
为非 root 用户设置位。
如果我在步骤 1 和步骤 2 之间添加该行chmod +x /root
,则步骤 4 中就不会再出现错误。但出于安全原因/root
应该保留drwx------
,因此我不建议将此作为解决方法。