Docker-Compose:如何将卷从主机映射到容器?

时间:2017-04-05 12:03:17

标签: mongodb docker docker-compose dockerfile

问题:

我想使用docker-compose从docker主机与特定容器共享一个文件夹。运行MongoDB的容器应将其数据文件放入/ var / lib / mongodb,但此文件夹应该是hosts文件夹/ var / lib / mongodb的挂载。

但它仍然是容器内的自己的本地目录,而不是来自主机的共享目录。

有时它最终会出现以下警告:

  

警告:服务“mongodb”正在使用卷“/ var / lib / mongodb”   以前的容器。主机映射“name_dbvolume”无效。   删除现有容器(使用docker-compose rm mongodb)   使用主机卷映射。

搬运工-compose.yml

version: '2'
services:
  loopback:
    build: .
    expose:
      - "80"
      - "443"
      - "28015"
      - "29015"
    ports:
      - 3000:3000
    links:
      - mongodb
    environment:
      VIRTUAL_HOST: api.xxxxxx.com
      VIRTUAL_PORT: 3000
      LETSENCRYPT_EMAIL: yyyyyy@xxxxxxx.com
      LETSENCRYPT_HOST: api.xxxxx.com
  mongodb:
    build: ./MongoDB
    ports:
      - "27017:27017"
      - "27018:27018"
      - "27019:27019"
      - "28017:28017"
    volumes:
        - dbvolume:/var/lib/mongodb
volumes:
    dbvolume:

MongoDB-Container的Dockerfile:

FROM mongo:latest

RUN  mkdir -p /var/lib/mongodb && \
     touch /var/lib/mongodb/.keep && \
     chown -R mongodb:mongodb /var/lib/mongodb


ADD mongodb.conf /etc/mongodb.conf

VOLUME [ "/var/lib/mongodb" ]

# EXPOSE 27017

USER mongodb
WORKDIR /var/lib/mongodb

ENTRYPOINT ["/usr/bin/mongod", "--config", "/etc/mongodb.conf"]
CMD ["--quiet"]

mongodb-container配置为MongoDB使用/ var / lib / mongodb作为数据目录。使用以下命令,我们尝试使用主机中的此文件夹:

VOLUME [“/ var / lib / mongodb”]

我在这里错了什么?

1 个答案:

答案 0 :(得分:1)

您的撰写配置会设置名为dbvolume

的命名数据卷

默认情况下,命名卷将存储在/var/lib/docker中:

→ docker volume inspect dbvolume
[
    {
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/dbvolume/_data",
        "Name": "dbvolume",
        "Options": {},
        "Scope": "local"
    }
]

Mounting a host directory as a volume在撰写文件中略有不同。

    volumes:
      - /var/lib/mongodb:/var/lib/mongodb

源仍在左侧,但您指定的是完整路径而不是名称。