Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
符号链接到Docker容器中的卷_Docker_Symlink_Mount - Fatal编程技术网

符号链接到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

我已经创建了一个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 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
应该可以工作。