Docker容器失败因为x.cert权限被拒绝。

4
我正在尝试向Docker容器添加SSL证书和密钥以在其中使用。 我不想使用COPY Dockerfile命令,而是使用以下"绑定挂载卷":
docker run  -p 443:443 -v grafana-storage:/var/lib/grafana -v /etc/ssl/certs/platform-loc/x.crt:/etc/grafana/x.crt -v /etc/ssl/certs/platform-loc/x.key:/etc/grafana/x.key -e "GF_INSTALL_PLUGINS=yesoreyeram-boomtable-panel"  grafana_app

但是前面的命令执行失败,出现了以下错误:

t=2019-08-28T17:33:40+0000 lvl=info msg="HTTP Server Listen" logger=http.server address=0.0.0.0:443 protocol=https subUrl= socket=
t=2019-08-28T17:33:40+0000 lvl=eror msg="Stopped HTTPServer" logger=server reason="open /etc/grafana/x.crt: permission denied"
t=2019-08-28T17:33:40+0000 lvl=info msg="Stopped provisioningServiceImpl" logger=server reason="context canceled"
t=2019-08-28T17:33:40+0000 lvl=eror msg="Server shutdown" logger=server reason="open /etc/grafana/x.crt: permission denied"

这是我的Dockerfile文件的内容。

FROM grafana/grafana
COPY config /config
USER root
RUN apt-get update && apt-get install -y vim
RUN cp /config/x.toml /etc/grafana/x.toml &&\
    cp /config/grafana.ini /etc/grafana/grafana.ini
ENTRYPOINT [ "/run.sh" ]

请问有人能帮我修复这个问题吗?


我认为Docker守护程序无法访问路径/etc/ssl/certs/platform-loc/x.crt,请尝试使用sudo运行Docker。 - Soumen Mukherjee
“root” 应该有文件的访问权限。服务器是否以另一个用户身份运行? - Henry
@SoumenMukherjee 我尝试使用sudo运行docker,但问题仍未解决 :( - Salem Masoud
2个回答

2

交叉参考:https://community.grafana.com/t/mount-ssl-certificate-failed-because-of-permission-denied/20597/2 - Jan Garaj
你知道有没有类似的InfluxDB 2.5 Docker镜像吗?谢谢,M。 - martin

2

当容器启动时,所有文件都会从主机操作系统继承它们的所有者、组和文件掩码。

对于该证书来说,它可能是root:root(或0:0),仅由用户可读取。在容器内,用户是grafana(其ID为472)。

> docker run -it --rm --entrypoint bash grafana/grafana
grafana@8edd34dc044d:/usr/share/grafana$ whoami
grafana
grafana@8edd34dc044d:/usr/share/grafana$ grep grafana /etc/passwd
grafana:x:472:472::/home/grafana:/bin/sh

所以,用户Grafana无法读取由root拥有的文件。
您可以更改文件的权限,使其对所有人可读,这将解决问题,但同时会危及主机上的该文件。
或者,您可以将镜像中的用户更改为root,但这被认为是不良做法。
选择哪种解决方案取决于您。也许这个证书可以让全世界都能够阅读。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接