代码之家  ›  专栏  ›  技术社区  ›  Mickael B.

Docker卷绑定空卷或将文件转换为文件夹

  •  0
  • Mickael B.  · 技术社区  · 5 年前

    但是,我可以尝试将某个容器中的数据装载到另一个容器中,或者将其运行到另一个容器中的某个容器中的某个容器中。我可以将该容器中的数据装载到另一个容器中的某个容器中,或者将其运行到另一个容器中的某个容器中。。。

    运行第一个容器:

    $ docker run -v /var/run/docker.sock:/var/run/docker.sock -it example /bin/bash
    
    root@3aa35965846a:/home/node/example# ls some_volume/ 
    test.txt
    root@3aa35965846a:/home/node/example# cat some_volume/test.txt 
    hello
    
    
    // Running the second container
    root@3aa35965846a:/home/node/example# docker run -v /home/node/example/some_volume/:/some_volume/ -it node:10 /bin/bash
    
    root@6a84739fbb92:/# ls /some_volume/
    *  test.txt
    root@6a84739fbb92:/# cat /some_volume/test.txt/
    cat: /some_volume/test.txt/: Is a directory
    

    第一次运行第二个容器时,卷是空的,如果我尝试直接装载一个文件,它将转换为一个文件夹,然后如果我尝试像上面的示例那样装载文件夹,则只有我之前尝试装载的文件,它是一个文件夹。

    这怎么可能?如果我尝试在第一个容器外装入一个卷,我没有任何问题,如何解决这个问题?

    0 回复  |  直到 5 年前
        1
  •  1
  •   David Maze    5 年前

    世界上的第一条道路 docker run -v 选项始终在主机系统上。例如,如果你

    docker run -v /etc:/x busybox cat /x/shadow
    

    它会把垃圾倒出来 主持人的 加密的密码文件,无论您是直接从主机还是从容器运行此命令。

    没有办法将任意目录从一个容器共享到另一个容器。如果启动容器知道自己的目录结构(特别是某个目录是从特定的主机路径或命名卷装入的),那么它可以将其复制到另一个容器,但这不是一般的答案。您看到的其他行为只是主机系统上不存在这些目录的结果。

    总的来说,我建议 将Docker用于主要通过文件系统与外部世界交互的短期进程。取下你在另一个容器中运行的任何程序,将其安装到你的映像中 Dockerfile ,并直接运行它,而无需通过Docker。

    如果你真的无法避免这种工作流程,我发现唯一可靠的方法就是 docker create 集装箱, docker cp 存档, docker start 它,和 docker wait 让它结束。完成后, docker cp 结果之前就公布了 docker rm 信息技术这是一种艰苦的工作流程,但它解决了两个容器不共享任何文件系统空间的问题。