首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法写入Docker卷

无法写入Docker卷
EN

DevOps用户
提问于 2020-03-12 21:20:43
回答 1查看 1.8K关注 0票数 2

我的设置

  • 我有一个基于php:7.4-apache的码头形象。
  • 我有两个Docker卷用于保存需要持久化的文件。
  • 在容器启动时,我运行Certbot来安装HTTPs证书。

问题

我发现我的应用程序不能写入Docker卷。

调试

使用ls -l,我发现我的卷的挂载点属于用户1451

代码语言:javascript
运行
复制
drwxr-xr-x 4     1451 users     176128 Mar 12 13:25 volume_mountpoint

我的web服务器在用户www-data下运行。

尝试解决方案

我尝试将容器运行的用户设置为www-data。这导致卷挂载点归www-data所有,后者解决了权限问题。此解决方案的问题是,Certbot需要root权限,并且在没有它的情况下无法获得HTTPs证书。

问题

解决这个问题的正确方法是什么?我需要Certbot在root下运行,但是让挂载点归www-data所有。

EN

回答 1

DevOps用户

回答已采纳

发布于 2020-03-13 04:08:32

过去对我有用的解决方案:从现有映像中创建一个新映像,并让新映像的切入点脚本修改volume_mountpoint的权限。

因此,对于映像(php:7.4-apache),您可以创建entrypoint.sh文件,如下所示

代码语言:javascript
运行
复制
chown www-data:www-data -R /path/to/volume_mountpoint
apache2-foreground

然后您的Dockerfile应该类似于

代码语言:javascript
运行
复制
FROM php:7.4-apache
COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

这样,当容器启动时,它应该更正权限。请注意,我还没有对上面的内容进行测试,可能需要一些调整--但希望它能显示出这个想法。

附注:也许有人有更好的方法-我自己也会很感兴趣的。

票数 1
EN
页面原文内容由DevOps提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://devops.stackexchange.com/questions/11065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档