【问题标题】:docker-compose using volume from exisiting containerdocker-compose 使用现有容器中的卷
【发布时间】:2018-01-20 01:41:51
【问题描述】:

docker 和 docker-compose 的新手,编写了启动几个服务的 compose 文件,其中一个依赖于 mongo 数据库。我不久前下载了 mongo 图像并将其与容器中的数据一起加载。当我通过 docker-compose 启动我的 mongo 实例时,会根据空图像启动一个新容器,因此不要获取数据。

一直在阅读有关卷的文章,试图让 compose 使用现有容器中的数据,现在已经尝试了几种排列方式,但无法让它找到数据。

当我使用数据启动容器并进行检查时,我得到:

    "Mounts": [
        {
            "Type": "volume",
            "Name": "3f78b88e3e06f31d5f65a45bb1cb964245551875218d065162625cc73e662b1e",
            "Source": "/var/lib/docker/volumes/3f78b88e3e06f31d5f65a45bb1cb964245551875218d065162625cc73e662b1e/_data",
            "Destination": "/data/configdb",
            "Driver": "local",
            "Mode": "",
            "RW": true,
            "Propagation": ""
        },
        {
            "Type": "volume",
            "Name": "d3f89470c9f8c53b55c30338f691eb1586600343004c502feffe8f81091d7d5c",
            "Source": "/var/lib/docker/volumes/d3f89470c9f8c53b55c30338f691eb1586600343004c502feffe8f81091d7d5c/_data",
            "Destination": "/data/db",
            "Driver": "local",
            "Mode": "",
            "RW": true,
            "Propagation": ""
        }
    ],

那么我是否正确地说我需要以某种方式让新容器使用卷标签来使用这些挂载点?

试过了:

volumes:
  - type: volume
    source: /var/lib/docker/volumes/3f78b88e3e06f31d5f65a45bb1cb964245551875218d065162625cc73e662b1e/_data
    target: /data/configdb
    volume:
      nocopy: true

  - type: volume
    source: /var/lib/docker/volumes/d3f89470c9f8c53b55c30338f691eb1586600343004c502feffe8f81091d7d5c/_data
    target: /data/db
    volume:
      nocopy: true

和:

volumes:
  - /data/configdb:/var/lib/docker/volumes/3f78b88e3e06f31d5f65a45bb1cb964245551875218d065162625cc73e662b1e/_data
  - /data/db:/var/lib/docker/volumes/d3f89470c9f8c53b55c30338f691eb1586600343004c502feffe8f81091d7d5c/_data

但老实说,抓住稻草,任何关于我应该如何使用现有数据的示例的帮助将不胜感激。

劳伦斯

【问题讨论】:

    标签: mongodb docker-compose volumes


    【解决方案1】:

    假设您使用的是 Compose 文件格式 v3.0+,请尝试将卷定义中的 type 选项更改为 bind。不同之处在于,对于volume 类型,当提供时,source 指的是命名卷的名称。对于bindsource 指的是 Docker 守护程序主机上的文件或目录的路径。

    您可以在 Docker documentation 中阅读有关不同类型挂载的更多信息。

    【讨论】:

      【解决方案2】:

      尝试以下方法:

      1. 使用 docker volume create data_storage 创建名称卷
      2. 使用卷 docker run -d -v data_storage:/data/db --name mongoding mongo 启动 mongo
      3. 创建数据库并将一些文档添加到集合中
      4. 杀死容器并启动一个新容器以查看它是否正常工作。

        码头集装箱检查 708bf6fe0a5b

            "Mounts": [
            {
                "Type": "volume",
                "Name": "data_storage",
                "Source": "/var/lib/docker/volumes/data_storage/_data",
                "Destination": "/data/db",
                "Driver": "local",
                "Mode": "z",
                "RW": true,
                "Propagation": ""
            },
        

      Read more here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-02-14
        • 1970-01-01
        • 2020-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多