linux - 非root用户的内部容器容器文件权限问题
问题描述
我正在从这里扩展程序的 docker 映像,我想更改一些配置并创建自己的 docker 映像。我已经编写了如下的 Dockerfile 并替换了该图像中的 server.xml 文件:
FROM exoplatform/exo-community
COPY server.xml /opt/exo/conf
RUN chmod 777 /opt/exo/conf/server.xml
当我创建 docker 映像并从该映像运行一个实例时,容器的运行程序无法访问该文件server.xml
,因为它的所有者是root
用户并且我看到了permission denied
错误。我试图通过chmod
命令更改 Dockerfile 中的所有权,但我看到了Operation not permitted
错误。运行容器的用户不是root用户,不能访问server.xml
root用户拥有的文件。我该如何解决这个问题?
解决方案
如果这实际上只是一个配置文件,我不会围绕它构建自定义图像。相反,使用docker run -v
选项在运行时注入它
docker run \
-v $PWD/server.xml:/opt/exo/conf/server.xml \
... \
exoplatform/exo-community
(您可能仍会遇到相同的权限问题。)
在您的 Dockerfile 方法中,基本映像作为备用用户运行,但默认情况下COPY指令使文件归根用户所有。从相对较新的 Docker 开始(18.03;如果您在 CentOS/RHEL 7 上使用 Docker 1.13,这将不起作用),您应该能够
COPY --chown=exo server.xml /opt/exo/conf
或者如果这不起作用,您可以显式切换到 root 用户并返回
COPY server.xml /opt/exo/conf
USER root
RUN chown exo /opt/exo/conf/server.xml
USER exo
推荐阅读
- javascript - 懒加载器突然停止工作。图片根本不显示
- ajax - ajax调用返回promis并由调用函数将其解析为它的值
- javascript - 如何模拟 Cypress.io 中丢失的窗口焦点
- php - 在学说实体中访问 OneToMany 关系时未定义的索引
- gradle - 在 Android Studio 中包含和排除不同风格的源集
- android - Android Studio 抱怨缺少 JNI 类
- c - 有没有更好的方法来写入设备文件而不是多次写入?
- javascript - 未调用 Shopware 插件 javascript 事件
- vba - excel vba工作日功能
- c# - Windows 10 Pro -version 1803 蓝牙配置文件访问