linux – 除非拥有777权限,否则Docker无法写入使用-v挂载的目录

当前位置:栏目首页 >> 内容详情

linux – 除非拥有777权限,否则Docker无法写入使用-v挂载的目录

发布时间: 2022-10-31 15:39:08 阅读数量:
本站教程收集整理的这篇文章主要介绍了linux – 除非拥有777权限,否则Docker无法写入使用-v挂载的目录,本站教程本站觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在使用带有docker的docker-solr映像,我需要在其中安装一个使用-v标志实现的目录.

问题是容器需要写入我已挂载到其中的目录,但似乎没有权限这样做,除非我在整个目录上执行chmod 777.我不认为设置允许所有用户读取和写入的权限是解决方案,但只是一个临时的解决方法.

任何人都可以指导我找到更规范的解决方案吗?

编辑:我一直在运行没有sudo的docker,因为我把自己添加到了docker组.我刚刚发现如果我用sudo运行docker问题就解决了,但我很好奇是否还有其他解决方案.

最佳答案 最近,在浏览了一些官方的docker存储库之后,我意识到解决这些权限问题的更惯用的方法是使用一个名为gosu的东西与入口点脚本串联.例如,如果我们采用现有的docker项目,例如solr,那就是我之前遇到问题的那个.

Github上的dockerfile非常有效地构建了整个项目,但没有解决权限问题.

所以为了解决这个问题,首先我将gosu设置添加到dockerfile(如果你实现了这个通知版本1.4是硬编码的.你可以检查最新版本herE).

# grab gosu for easy step-down from root
RUN mkdir -p /home/solr \
    && gpg --keyserver pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
    && curl -o /usr/local/bin/gosu -SL "https://github.com/tianon/gosu/releases/download/1.4/gosu-$(dpkg --print-architecturE)" \
    && curl -o /usr/local/bin/gosu.asc -SL "https://github.com/tianon/gosu/releases/download/1.4/gosu-$(dpkg --print-architecturE).asc" \
    && gpg --verify /usr/local/bin/gosu.asc \
    && rm /usr/local/bin/gosu.asc \
    && chmod +x /usr/local/bin/gosu

现在我们可以使用gosu,它基本上与su或sudo完全相同,但与docker的工作效果更好.从gosu的描述:

现在我对dockerfile做的其他更改是这些添加这些行:

copY solr_entrypoint.sh /sbin/entrypoint.sh
RUN chmod 755 /sbin/entrypoint.sh
ENTRYPOINT ["/sbin/entrypoint.sh"]

只是将我的入口点文件添加到docker容器中.

并删除该行:

USER $SOLR_USER

所以默认情况下你是root用户. (这就是为什么我们有gosu从root下台).

至于我自己的入口点文件,我不认为它写得很完美,但它完成了这项工作.

#!/bin/bash

set -e

export PS1="\w:\u docker-solr-> "

# step down from root when just running the default start command
case "$1" in
    start)
        chown -R solr /opt/solr/server/solr
        exec gosu solr /opt/solr/bin/solr -f
    ;;
    *)
        exec $@
    ;;
esac

docker run命令采用以下形式:

docker run 

基本上入口点说如果我想按照惯例运行solr,我们将参数开始传递给命令的结尾,如下所示:

docker run 

否则运行以root身份传递的命令.

start选项首先为solr用户提供目录的所有权,然后运行默认命令.这解决了所有权问题,因为与dockerfile设置(一次性事物)不同,入口点每次都会运行.

所以现在如果我使用-d标志挂载目录,在入口点实际运行solr之前,它将为您填充docker容器内的文件.

至于这对容器外的文件有什么影响,我的结果好坏参半,因为docker在OSX上行为有点怪异.对我来说,它没有改变容器外的文件,但是在另一个操作系统上,其中docker与文件系统的关系更好,它可能会改变你的文件在外面,但我想这就是你要处理的内容,如果你想要的话将文件挂载到容器中而不是仅仅复制它们.

本站总结

以上是本站教程为你收集整理的linux – 除非拥有777权限,否则Docker无法写入使用-v挂载的目录全部内容,希望文章能够帮你解决linux – 除非拥有777权限,否则Docker无法写入使用-v挂载的目录所遇到的程序开发问题。

如果觉得本站教程网站内容还不错,欢迎将本站教程推荐给好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。

猜你喜欢

  • 使用jmeter进行并发测试

    首先下载Jmeter下载好后运行后可以看到如下界面我这里是已经设置成中文了,设置方法options>chooselanguage>Chinese右键选择添加>线程>线程组这里可以配置线程的各个参数,包括线程数量,线程运行间隔和线程循环次数等参数右键线程组,添加>

  • 服务器租用哪家便宜?

    服务器租用哪家便宜价格优惠一直是大家很感兴趣的话题,哪个更好哪个更便宜几乎成了大家在产品开始都会问的问题。本站最新的活动是:在服务器,买一送一,一流的优质服务,让你的网络运行更安全,提升用户的在线体验。为此,我们在服务器:宣布了三件大事“买一送一”活动不仅仅是说说而已,它还包含各种好处:看看哪个适合你的业务,点击“八月限时活动”

  • 上海租用服务器哪家公司便宜?上海云主机云服务器配置方案?

    上海从服务器?上海云主机云服务器配置方案租哪个公司便宜?现在互联网发展很快。台湾省和云服务器的很多企业都在做互联网业务。很少有企业不做互联网业务。如果互联网业务有限,我们应该选择一个稳定的服务器作为基础,然后通过网站营销等方式带来客户。那么服务器?呢?价格是多少?1.首先,云

  • WordPress插件:WP China Yes解决主题插件无法更新的问题

    因为WordPress的服务器都在国外,所以中国大陆的用户在访问由WordPress官方提供的服务时总是很缓慢。今天,更新WordPress5.4程序,还是要求升级。通过使用WP-China-YesWordPress插件可以解决这个问题。目前,大陆用户无法正常访问WordPress官方插件主题商城,显示429TooMan