为了更好的安全性,我有一个非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内部会是同样的问题吗?
码头文件:
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"]
附录:存储库(dockerfile中有用户ROOT(:
使用RUN --mount=type=secret,id=mysecret,uid=1000 cat /run/secrets/mysecret
其中mysecret
是传递给docker build --secret id=mysecret,src=authority.priv.json
的内容,uid
是奇偶校验用户的uid
。
要扩展@nishant-kottary的答案,但对于构建工具(非常相似(,您可以:
-
运行命令
docker run -it --rm <YOUR_IMAGE_HERE> bash -c 'id -u $(whoami)'
以获取用户的uid
。或者你可以使用这个的一些其他变体来获得uid
-
接下来,在Dockerfile中,您可以执行
RUN --mount=type=secret,id=mysecret,uid=<THE_ID_FROM_STEP_1>,target=/run/secrets/mysecret.json
cat /run/secrets/mysecret.json
- 您的构建命令看起来像
docker buildx build --secret id=pipconf,src=/run/secrets/authority.priv.json
这是因为您在docker容器中设置了root用户,并且root拥有所有的monted卷和文件,而不是我甚至不确定是否存在的奇偶校验用户
我会点以下内容:
从Docker文件中删除USER root
。默认情况下,它是root。
检查容器中是否存在parity
用户。
如果不使用/home/parity
目录创建它。
按照您的操作装载卷和文件。
CCD_ 13给出了新创建的用户的所有权。
然后告诉容器默认使用USER parity
新创建的用户
将您可能需要的入口点添加到RUN chmod ug+x /home/parity/entrypoint.sh
,这肯定会使其可执行。
很好(希望如此(,在运行容器时不需要设置任何用户,默认情况下,行USER parity
将使用parity
用户。