Mac和Linux上的Docker问题与权限

我在共享卷上创build的文件的权限有问题(这不幸是一个常见问题)。 当我在linux(ubuntu)上运行以下内容时,创build的文件最终被root所拥有。 当我在OSX上运行这个文件时,文件最终被运行docker命令的用户所拥有。

 cd mkdir temp-docker docker run --rm -v ~/temp-docker/:/root/temp ubuntu /bin/touch /root/temp/touched ls -la temp-docker/touched # rm -Rf temp-docker 

从linux输出

 -rw-r--r-- 1 root root 0 Nov 24 09:48 temp-docker/touched 

从osx输出

 -rw-r--r-- 1 MyUser staff 0B 24 Nov 09:48 temp-docker/touched 

有没有办法轻松模仿OSX的行为? 或者,这是否正常工作,因为OSX是在引擎盖下使用vagrant和vboxsf,并没有办法在linux上轻松地重现这一点?

我不知道'容易',它需要运行容器作为一个用户以外的根(你可能应该做的)。

但是这里有一个例子,运行Docker 1.9

我的Dockerfile看起来像这样:

 FROM ubuntu:14.04 # Setup user environment RUN useradd -d /home/dtest -m dtest # Create a shared data volume RUN mkdir /var/shared/ RUN chown -R dtest:dtest /var/shared VOLUME /var/shared WORKDIR /home/dtest # Link in shared parts to the home directory RUN ln -s /var/shared /home/dtest/shared RUN chown -R dtest: /home/dtest USER dtest CMD /bin/bash 

build立我的图像后,我们称之为dtest/test ,我这样运行它:

 $ docker run --rm -v $(pwd):/var/shared/ -it dtest/test bash # on the container: dtest@33b5a1ee6c62:~$ ls -l total 0 lrwxrwxrwx 1 dtest dtest 11 Nov 24 20:47 shared -> /var/shared dtest@33b5a1ee6c62:~$ ls -l shared/ total 4 -rw-r--r-- 1 dtest staff 642 Nov 24 20:47 Dockerfile dtest@33b5a1ee6c62:~$ echo "Test" > /var/shared/foo dtest@33b5a1ee6c62:~$ ls -l $(pwd)/shared/ total 8 -rw-r--r-- 1 dtest staff 642 Nov 24 20:47 Dockerfile -rw-r--r-- 1 dtest staff 5 Nov 24 20:52 foo # on the OSX host $ ls -l total 16 -rw-r--r-- 1 dtest staff 642 Nov 24 15:47 Dockerfile -rw-r--r-- 1 dtest staff 5 Nov 24 15:52 foo 

这也在Docker 1.8.x中工作,尽pipe我必须在/ var / shared中添加一个空文件,然后将其添加为VOLUME

 # Create a shared data volume # We need to create an empty file, otherwise the volume will # belong to root. # This is probably a Docker bug. RUN mkdir /var/shared/ RUN touch /var/shared/placeholder RUN chown -R dtest:dtest /var/shared VOLUME /var/shared 

这个方法的信用转到这个博客上创build一个devbox的提示。