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

4

问题:

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

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

有时还会出现以下警告:

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

docker-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-容器的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"]
被配置为将/var/lib/mongodb作为数据目录。下面的命令尝试从主机使用此文件夹:

VOLUME [ "/var/lib/mongodb" ]

我在这里做错了什么?

1个回答

2
您的compose配置设置了一个名为dbvolume的数据卷。
默认情况下,命名卷将存储在/var/lib/docker中:
→ docker volume inspect dbvolume
[
    {
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/dbvolume/_data",
        "Name": "dbvolume",
        "Options": {},
        "Scope": "local"
    }
]

在compose文件中,将主机目录挂载为卷略有不同。

详见

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

源代码仍然在左侧,但是您需要指定完整路径而不是名称。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接