Docker容器中的卷的符号链接

时间:2015-07-19 12:06:49

标签: docker symlink mount

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

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目录,但是我的符号链接无法建立。运行docker exec -it <container_id> ls -la /app/src/不会将目录显示为符号链接,也不会通过运行bash并检查目录来进入容器内部。在容器启动后手动创建符号链接很好。

在容器构建和/或运行期间创建符号链接时,是否需要执行不同的操作?

更新详情

我正在尝试从主机(已安装的S3存储桶)中仅在生产中的容器中挂载一个目录,因为我在dev&amp; amp;中并不需要它。暂存,但我确实需要它在容器和机器之间(我通过AWS Elastic Beanstalk进行部署)在生产中持续存在。

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

1 个答案:

答案 0 :(得分:0)

查看允许您在容器启动时运行初始化脚本的s6-overlay项目。允许您在启动服务之前在s3中安装目录。它还允许您在docker stop上取消服务,以便您可以通知任何其他服务服务正在关闭并收获任何僵尸进程。