【问题标题】:Mount a volume without deleting files挂载卷而不删除文件
【发布时间】:2019-01-22 04:14:42
【问题描述】:

我正在尝试使用名为 tmp 的文件夹作为 docker 容器中的一个卷来执行此操作,我正在使用以下 docker-compose.yml 文件

version: "3"

services:
  master:
    image: singularities/spark
    command: start-spark master
    hostname: master
    ports:
      - "6066:6066"
      - "7070:7070"
      - "8080:8080"
      - "50070:50070"
      - "7077:7077"
    volumes:
      - "../data:/tmp/"
    deploy:
      placement:
        constraints:
          - node.role == manager
  worker:
    image: singularities/spark
    command: start-spark worker master
    environment:
      SPARK_WORKER_CORES: 1
      SPARK_WORKER_MEMORY: 4g
    links:
      - master
    volumes:
      - "../data:/tmp/"

tmp 文件夹存在于奇异点/火花图像中。运行以下命令后,tmp文件夹下的文件夹和文件被删除。

docker-compose up -d

【问题讨论】:

标签: docker docker-compose


【解决方案1】:

线索就在名字里。 /tmp 文件夹在启动时(即容器启动时)被清除。如果您需要持久数据,则必须使用不同的文件夹名称。

【讨论】:

    【解决方案2】:

    当您执行docker-compose up -d 时,在创建容器时,docker 会将您的../data 主机目录挂载到/tmp,这会清理映像/容器的/tmp,并将您拥有的所有内容放入主机的../data .

    您可能必须选择/tmp 以外的其他容器路径,以确保它具有由singularities/spark 图像创建的数据。

    编辑 1

    docker cp 命令可以帮助你从主机/容器复制文件。

    您想从图像的/tmp 复制到主机,然后将主机复制到tmp不确定您为什么要这样做,不建议这样做并且非常罕见的情况

    但是,您可以将docker run 与命名卷或主机绑定卷一起使用来启动容器并获取数据。在docker cp 之后将数据从主机或容器复制到主机或容器。

    【讨论】:

    • 有什么办法可以在两侧本地和容器之间同步数据
    • 哪个目录?您可以将其安装在任何地方,将其设为../data:/host_data/。现在您将在容器的/host_data 中看到您的主机数据。
    • 我上面声明的像tmp这样的现有目录,我想把tmp中的文件放到本地,把本地的文件复制到tmp
    • AFAIU,在这种情况下,您可能需要为 master 和 worker 创建一个基本映像为 singularities/spark 的 Dockerfile。使用 Dockerfile 将容器中的所有内容放到某个目录中,并使用入口点脚本执行 cpmv 以更安全。这个问题并没有真正阐明预期的行为,您可以通过创建 Dockerfile 并在另一个问题中发布您的疑虑来尝试一下。
    【解决方案3】:

    这仅适用于单个文件

        volumes:
      - "../data/config.properties:/tmp/config.properties"
    

    例如

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-22
      • 1970-01-01
      • 2018-06-08
      • 2021-07-16
      • 2019-08-24
      • 2015-09-12
      • 1970-01-01
      相关资源
      最近更新 更多