2016-11-17 65 views
1

我创建了一个dockerfile来容纳我的Laravel应用程序用于本地开发环境。如何共享Docker容器中的Laravel应用程序代码库,同时保留权限?

到目前为止,我已经实现了大部分我所需要的,但是,每一个命令跑进容器(如composer install和等)会改变我的代码库文件与集装箱root的UID和生成权限在我的主机冲突。

到目前为止,这是我dockerfile

https://github.com/timegridio/dockerfilesmy project codebase(需要时)。

我的研究,我已经试过和this question给出一些提示的recommendations of this article,我认为似乎是相当接近的我需要什么。然而,我没有成功地处理这些问题,并且遇到了错误(请参阅我粘贴输出的question comments,但我不想在这个问题上混用这种方法)。

谢谢你的时间!

回答

1

您在构建过程中(在Dockerfile中)所做的一切都不会改变您的主机中的内容。只有在docker exec中做什么之后会发生什么,或者应用程序本身会改变您的文件。因此,当您执行您的容器时,请指定您的主机UID和GID:

docker run -p 8000:8000 -v ~/timegrid/:/var/www/timegrid -u=<UID> -g=<GID> timegrid:latest 

一切都将为这些ID做出。如果您的应用程序行为不佳,可能需要在创建目录之前在Dockerfile中指定USER指令。

主机安装的卷在某些方面总是很复杂,许可的事情让我们总是很头疼。您可以使用与您的主机用户相同的id来定义一个用户,但您的Dockerfile只能为您工作。如果您这样决定,则可以使用AUX指令来指定ID。

问候

+0

感谢您的回答,它澄清。我尝试了一些改变并回传。是的,我的意思是'docker exec'下的变化,是的,我希望dockerfile对其他用户是可移植的,这就是为什么我更喜欢依赖硬编码的UID或尽可能少的参数。病后回来! – alariva

+0

我明白了,但是,我无法使其工作。将容器作为另一个用户运行会导致mysqld失败。使用exec作为另一个用户使我无法修改以根用户身份创建的文件。有什么方法可以在构建时切换UID(通过外部参数获取此值)? – alariva

+0

是使用Dockerfile中的USER指令和AUX。你可以例如让docker run按原样运行,但改变docker exec –

相关问题