美文网首页
解决挂载目录到Docker中volume的权限

解决挂载目录到Docker中volume的权限

作者: 风吹路过的云 | 来源:发表于2019-04-25 00:34 被阅读0次

好多时候,我们docker run一个镜像,会挂载一个目录到容器中去,比如:

docker run --name myat -d -p 8080:8080 -v /data/jira/:/var/atlassian/application-data/jira/ myjira:v1

把/data/jira目录挂载到容器中去了。
如果build镜像时不做定制,直接跑start-jira.sh的话,此时的jira用户对/var/atlassian/application-data/jira/是没有权限的,
看此时的Dockerfile文件

root@ding:~/jira# cat Dockerfile
FROM ubuntu
LABEL maintainer "aaa@xxx.com"
ENV ATLASSIAN_PATH = /opt/atlassian \
    ATLASSIAN_DATA_PATH = /var/atlassian

RUN useradd -ms /bin/bash jira

WORKDIR /opt
COPY --chown=jira:jira pro/atlassian/jira/ ./atlassian/jira/

WORKDIR /var
COPY --chown=jira:jira data/atlassian/application-data/jira/ ./atlassian/application-data/jira/

WORKDIR /
COPY start.sh /

EXPOSE 8080 8005

ENTRYPOINT ["/opt/atlassian/jira/bin/start-jira.sh"]

#CMD ["/opt/atlassian/jira/bin/start-jira.sh", "-fg"]

看上面Dockerfile,是直接跑/opt/atlassian/jira/bin/start-jira.sh了。

那么,如果解决挂载目录的权限问题呢?
答案很简单,看上面已经把start.sh脚本拷进镜像了,只要在start.sh中执行一下chown就可以了,
看start.sh文件内容,哈哈,是不是很简单

root@ding:~/jira# cat start.sh
#!/bin/bash

chown jira:root /var/atlassian/application-data/jira/ -R
/opt/atlassian/jira/bin/start-jira.sh -fg

之后,定制的Dockerfile是这样的:

root@ding:~/jira# cat Dockerfile
FROM ubuntu
LABEL maintainer "aaa@xxx.com"
ENV ATLASSIAN_PATH = /opt/atlassian \
    ATLASSIAN_DATA_PATH = /var/atlassian

RUN useradd -ms /bin/bash jira

WORKDIR /opt
COPY --chown=jira:jira pro/atlassian/jira/ ./atlassian/jira/

WORKDIR /var
COPY --chown=jira:jira data/atlassian/application-data/jira/ ./atlassian/application-data/jira/

WORKDIR /
COPY start.sh /

EXPOSE 8080 8005
ENTRYPOINT ["/start.sh"]

#ENTRYPOINT ["/opt/atlassian/jira/bin/start-jira.sh"]
#CMD ["/opt/atlassian/jira/bin/start-jira.sh", "-fg"]

看到了没?是ENTRYPOINT ["/start.sh"]了,而不是ENTRYPOINT ["/opt/atlassian/jira/bin/start-jira.sh"]了。

参考:

http://note.qidong.name/2018/01/docker-volume-permission/

相关文章

网友评论

      本文标题:解决挂载目录到Docker中volume的权限

      本文链接:https://www.haomeiwen.com/subject/amyogqtx.html