符号链接到Docker容器中的卷
我已经创建了一个Docker容器,它是一个小应用程序,其中有一个目录,根据环境的不同,我想替换(或不替换)它的内容。我试图通过创建一个卷并仅在其他环境中装载它来解决这个问题。在容器内部,我正在从源目录创建一个指向卷的符号链接符号链接到Docker容器中的卷,docker,symlink,mount,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 \ &a
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 ls-la/app/src/
不会将目录显示为符号链接,也不会通过运行bash和检查目录进入容器内部。在容器启动后手动创建符号链接是可以的
在容器构建和/或运行期间创建符号链接时,是否需要执行其他操作
更新详细信息
我正试图仅在生产环境中从容器中的主机(挂载的S3 bucket)挂载目录,因为在开发和登台环境中我不需要它,但我需要它在生产环境中的容器和机器之间持久化(我通过AWS Elastic Beanstalk进行部署)
我曾尝试将主机目录直接装载到
/app/src/dir/
,但我发现我无法更改目录的所有者和组以允许应用程序从中读取(web服务器不以root用户身份运行)。查看允许您在容器启动时运行初始化脚本的项目。允许您在启动服务之前在s3中装载目录。它还允许您在docker stop
上定义服务,以便您可以通知任何其他服务某个服务正在关闭,并获取任何僵尸进程。我严重怀疑您能否在构建时创建指向卷的符号链接。不过,如果您将ln-s
放在CMD或ENTRYPOINT脚本中,我希望它会起作用。在这种情况下,直接将源目录作为卷公开会更明智吗?我真的不明白您想要实现什么。我认为你不了解卷是如何工作的:感谢链接,它们帮助了你。我想把一个S3桶装到一个容器里。我将用一些细节更新我的问题。你只是问如何设置目录的权限吗?这相当简单,类似于docker run-u root-v HOST_DIR:/tmp php:5.6-apache chown USER/tmp
应该可以工作。