Linux 将目录装载到Docker中的命名卷

Linux 将目录装载到Docker中的命名卷,linux,docker,containers,Linux,Docker,Containers,我希望我的项目的源代码可以通过命名卷访问(而不是使用bind mount方法)。但我有一个困惑,我不知道如何将主机目录装载到命名卷。因此,我在docker-compose.yml中定义了一个卷: volumes: appData: services: nginx: . . . volumes: - appData:/usr/share/data 一切正常,但我应该如何将主机文件添加到命名卷?而当。不幸的是,没有像现

我希望我的项目的源代码可以通过命名卷访问(而不是使用bind mount方法)。但我有一个困惑,我不知道如何将主机目录装载到命名卷。因此,我在docker-compose.yml中定义了一个卷:

volumes:
   appData:

services:
   nginx:
      .
      .
      .
      volumes:
         - appData:/usr/share/data

一切正常,但我应该如何将主机文件添加到命名卷?而当。

不幸的是,没有像现在这样直截了当的方法来实现这一点。Docker文档建议在这种情况下使用绑定挂载或第三方卷插件。看不到任何近期的计划来实施同样的计划

但是,您可以用另一种方式手动执行-

  • 创建卷(使用compose时,卷是以当前目录(PROJECTNAME)作为前缀创建的)
    $docker volume create${PROJECTNAME}\u appData

  • 创建虚拟容器并将主机目录复制到命名卷中并验证它-

    $ docker container create --name dummy -v ${PROJECTNAME}_appData:/root alpine  #Create 
    $ docker cp ${PWD}/source_myfile.txt dummy:/root/myfile.txt     #copy 
    $ docker run -v ${PROJECTNAME}_appData:/root alpine ls -l /root #Verify 
    
  • 现在,当您执行
    docker compose up-d
    时,它将跳过创建卷,因为它已经存在

    PS-我知道这不是一个标准的解决方案,但这是我能找到的所有快速解决方案。对于永久性修复,您可以使用第三方卷插件。

    获取有关该问题的更多详细信息-

    Ref-

    为什么您特别希望将源代码存储在卷中,而不是将其构建到映像中?你为什么特别希望它出现在命名卷中?@DavidMaze你说得对。我发现我的方法有问题。