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

时间:2019-08-29 13:13:39

标签: docker ssl grafana

我正在尝试将SSL证书和密钥添加到Docker容器中以在其中使用。我不想使用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" ]

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

启动容器后,所有文件都会从主机操作系统继承其所有者,组和文件掩码。

对于该证书,它可能是root:root(或0:0),仅供用户读取。在容器内部,用户是grafana(id为472)。

    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            tabLayout=findViewById(R.id.tablayout);
            viewPager=findViewById(R.id.viewPager);
            ViewPageAdapter adapter =new 
            ViewPageAdapter(getSupportFragmentManager());
            adapter.AddFragment(new BlankFragment(),"first");
            adapter.AddFragment(new BlankFragment2(),"second");
            adapter.AddFragment(new BlankFragment3(),"third");
            viewPager.setAdapter(adapter);
            tabLayout.setupWithViewPager(viewPager);
}

因此,用户grafana无法读取root拥有的文件。

您可以将文件的权限更改为所有人可读,这可以解决问题,但同时会破坏主机上的文件。

或者,您可以将映像中的用户更改为root用户,但这被认为是不好的做法。

您选择哪种解决方案取决于您。也许此证书适合具有世界知识的人。

答案 1 :(得分:2)

我受Grafana文档的启发找到了答案,基本上我不得不运行

chown 472:472 x.*

问题已经解决

文档:https://grafana.com/docs/installation/docker/