如何在Dockerfile中更改VOLUME目录的所有者

70次阅读
没有评论

问题描述

在Dockerfile中有一个需求,希望能够定义或更改VOLUME目录的默认所有者。他在运行容器后发现,/opt/myvolume目录的所有者是root,而不是ubuntu。他想知道是否有办法在Dockerfile中定义或更改VOLUME目录的默认所有者。

解决方案

请注意以下操作注意版本差异及修改前做好备份。
根据Docker的文档,VOLUME指令会继承容器中现有目录的内容和权限。因此,你可以通过以下Dockerfile来解决这个问题:

FROM ubuntu:xenial
RUN useradd -d /home/ubuntu -ms /bin/bash -g root -G sudo -p ubuntu ubuntu
RUN mkdir /opt/myvolume && chown ubuntu /opt/myvolume
WORKDIR /home/ubuntu
VOLUME /opt/myvolume

需要注意的是,目录的创建必须以root身份进行(以便能够在/opt目录下写入文件)。
这样,容器启动后,/opt/myvolume目录的所有者将会是ubuntu用户。

评论1:这个技巧似乎是在目录创建后指定VOLUME指令,如果在声明之后对卷进行任何更改,这些更改将被丢弃。
评论2:目录的创建与VOLUME指令无关,卷将在容器外部挂载,因此在挂载之前在容器内部进行的任何操作都将被丢弃。我不太理解你的评论。

方案2

在某些环境中,SELinux可能会阻止文件访问。可以通过临时或永久禁用SELinux来解决此问题(但强烈建议不要永久禁用)。可以在这里找到有关此操作的指南:https://www.tecmint.com/disable-selinux-temporarily-permanently-in-centos-rhel-fedora/
如果你在使用Docker时遇到权限问题,可以尝试禁用SELinux来解决。

正文完