我有一个与非root用户一起运行的docker容器,以提高安全性,但似乎无法访问我与其共享的秘密:
Importing account from "/run/secrets/authority.priv.json" failed: Permission denied (os error 13)
我在docker compose中尝试了不同的解决方案: 1.将uid和gid设置为1000(如果用户在容器中,则为uid / gid) 2.将模式设置为0444甚至0777
但是这些都不起作用,只有使用root才能允许我使用这些秘密。
有什么主意吗?
奖金问题:在kubernetes中会不会是同样的问题?
dockerfile:
FROM parity/parity:v2.2.1
LABEL maintainer="vincent@serpoul.com"
# SAD but It seems impossible to read the secrets otherwise
USER root
VOLUME ["/home/parity/.local/share/io.parity.ethereum"]
ADD ./configPoANode.toml /home/parity/configPoANode.toml
ADD ./PoA.json /home/parity/PoA.json
ADD ./entrypoint.sh /home/parity/entrypoint.sh
ENTRYPOINT ["/home/parity/entrypoint.sh"]
附录:repository(在dockerfile中具有用户ROOT):
答案 0 :(得分:3)
使用RUN --mount=type=secret,id=mysecret,uid=1000 cat /run/secrets/mysecret
其中 mysecret
是您传递给 docker build --secret id=mysecret,src=authority.priv.json
的内容,uid
是奇偶校验用户的 uid
。
答案 1 :(得分:0)
这是因为您要在docker容器中设置root用户,并且root拥有所有经过精装的卷和文件,而不是我不确定甚至还不存在的奇偶校验用户。
我将执行以下操作:
从dockerfile中删除USER root
。默认情况下是root。
检查容器中是否还存在parity
个用户。
如果未使用/home/parity
目录创建它。
像以前一样安装卷和文件。
RUN chown -R parity:parity /home/parity
赋予新创建的用户的所有权。
然后告诉容器默认使用USER parity
将您可能需要的入口点添加到RUN chmod ug+x /home/parity/entrypoint.sh
中,以确保它可以执行。
您很乐意(希望如此),运行容器时无需设置任何用户,行USER parity
会默认使用parity
用户。