如何从名为volume的docker共享子文件夹?

问题描述 投票:2回答:1

这是一个示例symfony项目:

my_project:
    assets:
    src:
    web:
    package.json
    composer.json

我有一个apache容器和一个带有webpack的容器,用于监视assets文件夹并在发生变化时构建它。

由于两个容器都需要访问相同的文件系统,让我们说:

  • 创建命名卷
  • 使用此technique复制my_project
  • 运行一些composer installnpm install命令

一切准备就绪后,我需要apache容器与主机和webpack容器共享src文件夹,以与主机共享assets文件夹。 这样,每次我更改这些文件夹中的文件时,我都能在浏览器中看到结果。

我看到暂时不是possible挂载子目录所以其他方式是什么? 或者我是否以错误的方式思考它?

docker docker-compose dockerfile
1个回答
0
投票

由于安装命名卷的子目录是not a possibility,也许你可以尝试以下。

在我看来,多个容器需要访问同一个文件系统。根据码头volume docs

请记住,多个容器可以安装相同的卷,并且可以为其中一些容器以读写方式挂载,同时为其他容器以只读方式挂载。

基本上,您可以创建一个docker卷并在所有容器之间共享它:

# Initialize the Docker Volume
docker volume create my_project_volume
docker run -v my_project_volume:/my_project --name helper alpine true
docker cp . helper:/my_project
docker rm helper

如果您希望应用程序(例如apache)仅访问卷中的子文件夹,则可以始终将卷装载到/(或您选择的任何位置),并从应用程序将访问卷子目录的目录中创建符号链接。例如:

# 1. Run your apache container, mounting the named volume to root dir
docker run -v my_project_volume:/my_project --name my_apache httpd:latest

# 2. Create symlink to named volume subdirectory
docker exec -it my_apache ln -s /usr/local/apache2/htdocs /my_project/src
© www.soinside.com 2019 - 2024. All rights reserved.