符号链接到Docker容器中的卷

我已经创build了一个Docker容器的一个小应用程序,其中我有一个目录的内容,我想要取代(或不是)取决于环境。 我试图通过创build一个卷,并只在其他环境中安装它来解决这个问题。 在容器内部,我从源目录创build一个符号链接到卷。

FROM php:5.6-apache # Copy in sources files etc # Ensure the directory exists and make a symlink to it RUN mkdir -p /data/share \ && rm -rf /app/src/dir \ && ln -s /data/share /app/src/dir \ && chown -hR appropriate:settings /app/src/dir VOLUME ["/data/share"] 

当我在开发中运行容器时,我根本不在/data/share上挂载任何东西,而在生产环境中,我从主机挂载一个目录(反过来安装S3目录,以防有所作为)。

我发现/data/share目录正确安装,但我的符号链接根本无法build立。 运行docker exec -it <container_id> ls -la /app/src/不会将目录显示为符号链接,也不会通过运行bash和检查目录进入容器。 在容器启动后手工创build符号链接就可以了。

在容器构build和/或运行期间创build符号链接时,是否需要做一些不同的事情?

更新具体细节

我试图从主机(一个安装的S3桶)中的一个目录, 只在生产中 ,因为我不需要在开发和分期,但我确实需要它在容器和机器之间坚持(我通过AWS Elastic Beanstalk进行部署)。

我已经尝试将主机目录直接挂载到/app/src/dir/ ,但我发现我无法更改目录的所有者和组以允许应用程序从中读取(Web服务器不会)以root身份运行)。

看看s6-overlay项目,它允许你在容器启动时运行初始化脚本。 允许你在启动你的服务之前在S3中安装一个目录。 它也允许你在docker docker stopdocker stop一个服务,这样你就可以通知任何其他服务一个服务正在closures并且收获任何僵尸进程。