<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Volume on Blog</title>
    <link>/tags/volume/</link>
    <description>Recent content in Volume on Blog</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Wed, 20 Oct 2021 07:07:12 +0000</lastBuildDate>
    <atom:link href="/tags/volume/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>理解Docker挂载卷文件权限</title>
      <link>/posts/2021-10-20-%E7%90%86%E8%A7%A3docker%E6%8C%82%E8%BD%BD%E5%8D%B7volume%E6%9D%83%E9%99%90/</link>
      <pubDate>Wed, 20 Oct 2021 07:07:12 +0000</pubDate>
      <guid>/posts/2021-10-20-%E7%90%86%E8%A7%A3docker%E6%8C%82%E8%BD%BD%E5%8D%B7volume%E6%9D%83%E9%99%90/</guid>
      <description>&lt;h2 id=&#34;一默认挂载权限问题&#34;&gt;一、默认挂载权限问题&lt;/h2&gt;&#xA;&lt;p&gt;首先，本地挂载点新建测试文件test.txt，然后将该目录挂载到容器的test目录&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://objects.911723.xyz/wp-content/uploads/2021/10/image-7.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;可以看到我们在容器外新建的test.txt文件在容器内的所有者变成了1000，然后我们在容器内新建文件查看容器外的权限，发现容器中新建的test1.txt所有者变成了root&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://objects.911723.xyz/wp-content/uploads/2021/10/image-8.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;接着查看下UID：1000所属用户&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://objects.911723.xyz/wp-content/uploads/2021/10/image-9.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;最后我们在指定wag用户启动docker，然后在容器内新建test3.txt文件，查看文件所有者&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://objects.911723.xyz/wp-content/uploads/2021/10/image-10.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;二结论&#34;&gt;二、结论&lt;/h2&gt;&#xA;&lt;p&gt;从以上可以得出，docker启动容器如果不指定用户，会默认以**root（UID=0）**方式运行，导致其中新建的文件所有者映射到容器外为root，容器外新建的文件映射到容器内所有者UID不变。&lt;/p&gt;&#xA;&lt;h3 id=&#34;容器共享宿主机的uid&#34;&gt;容器共享宿主机的UID&lt;/h3&gt;&#xA;&lt;p&gt;Linux内核负责管理uid和gid，并通过内核级别的系统调用来决定是否通过请求的权限。比如，当一个进程尝试去写文件，内核会检查创建这个进程的的user的uid和gid，来决定这个进程是否有权限修改这个文件。这里没有使用username，而是uid。&lt;/p&gt;&#xA;&lt;p&gt;当docker容器运行在宿主机上的时候，仍然只有一个内核。容器共享宿主机的内核，所以所有的uid和gid都受同一个内核来控制.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
