Docker在Mac上运行得很好,但我必须在VirtualBox(或Parallels或VMWare Fusion)中运行Docker主机,因为Mac的内核不支持Docker。
因此,我尝试在Ubuntu桌面上设置我的应用程序和Docker-compose- natively,其中Docker客户端和Docker主机在同一个系统上物理运行。这是有效的,但是我运行的docker容器不能写入挂载的主机卷。
我使用docker-compose,设置如下:
volumes:
- ./api:/usr/src/app
因此,我将主机Ubuntu OS的“API”目录挂载到/usr/src/app下的docker容器中。docker inspect <container ID>
显示卷是可写的
"Destination": "/usr/src/app",
"Mode": "rw",
"RW": true
然而,它不是:当我尝试从docker容器中创建一个目录或编辑一个文件时,我会得到permission denied
。
当然,我在谷歌上搜索了这个问题,我遇到了一些SELinux的CentOS/RHEL问题,但是我运行的是Ubuntu 15.10,64位版本,而不是CentOS。
3条答案
按热度按时间q9rjltbz1#
如果主机上的
uid
(id -u
)与docker容器(通常为“docker”)中的用户的uid
不相同,那么您可能会遇到此问题。您可以尝试:1.使您的用户和docker容器中的用户的UID相同。
1.将目录上的组权限设置为您和docker所属的组可写。
1.您也可以使用核选项:
chmod a+rwx -R project-dir/
核选项将使您的
git
工作区变得肮脏,这将使您非常烦恼,因此不是最佳的长期解决方案。它能止血。为了进一步理解这个问题,你可能会发现这些有用的:
vxbzzdmp2#
新答案:
这个问题似乎有很多流量,现在有更好的解决方案-fixuid,顾名思义,它是一个神奇的可执行文件,可以在容器启动时更改容器用户的uid和gid(使用-u somebody:somebody)。
有关更多详细说明,请参阅:https://boxboat.com/2017/07/25/fixuid-change-docker-container-uid-gid/
老答案:
从Docker 1.7版本开始,你可以选择挂载一个主机目录,并使用:Z或:z标志来访问容器,如下所示:
从docker-compose v1.4.0开始,你可以像这样在docker compose中使用它:
虽然我应该补充一下,但我仍然有一些问题(参见Adding permissions to host directory with docker-compose)。
参考文献:
将Linux与Docker一起使用可能会导致SELinux出现问题-http://www.projectatomic.io/blog/2015/06/using-volumes-with-docker-can-cause-problems-with-selinux/
Docker用户指南-https://docs.docker.com/engine/userguide/dockervolumes/#volume-labels
Docker-compose release notes for v1.4.0 - https://github.com/docker/compose/releases/tag/1.4.0
nue99wik3#
如果你的本地配置不包含
directory "/var/..."
,那么它可能试图把文件放到另一个没有服务器访问权限的目录中。将其添加到将进入容器的本地配置中