如何使用 docker-compose 和 docker-machine 为 mongoDB 挂载外部卷

问题描述 投票:0回答:7

我想将

mongoDB
数据保留在容器之外的指定卷上。我正在使用 docker-compose ,yml 文件看起来像

web:
  build: .
  command: python -u app.py
  ports:
    - "5000:5000"
  volumes:
    - .:/todo
  links:
    - db
db:
  image: mongo:3.0.2
mongodb docker docker-compose docker-machine
7个回答
38
投票

如该映像的 docker hub 页面上所述(https://hub.docker.com/_/mongo/),您可以使用

volumes:
  - './data:/data/db'

它将使用主机路径

./data


11
投票

我想你会像我一样尝试在 OSX 系统上启动容器吗?正如 joshuajabbour 指出的那样,主机卷目录不能位于 /Users(或 ~)下here

尝试例如

 volumes:
   - /usr/local/mongodb:/todo

0
投票

使用您的文件

web:
  build: .
  command: python -u app.py
  ports:
    - "5000:5000"
  volumes:
    - .:/todo # HERE --> /mnt/c/temp/mongo:/data/db (mnt= root | c = your drive | temp and mongo = folder
  links:
- db
db:
  image: mongo:3.0.2
  • 那么,该值可以是 /mnt/c/temp/mongo:/data/db

不要忘记使用环境变量:

environment:
  MONGO_INITDB_ROOT_USERNAME: root
  MONGO_INITDB_ROOT_PASSWORD: fw324fe

0
投票

我遇到了同样的问题,我在 Windows 10 中使用 docker 并使用 WSL 2 与 ubuntu 集成,我只能通过输入完整路径来解决问题:

 volumes:
          - /home/you_user/mongoDocker/docker:/data/db

0
投票

此文档帮助了我: https://docs.docker.com/compose/compose-file/#volumes

要在多个服务中重用卷,必须在顶级

volumes
键中声明命名卷。

此示例显示了后端服务正在使用的命名卷(db-data),以及为单个服务定义的绑定挂载。

services:
  backend:
    image: awesome/backend
    volumes:
      - type: volume #this is to declare that the type is volume
        source: db-data #this is the name of your already existing volume
        target: /data #this is the target or destination of the data being saved by your volume 
        volume:
          nocopy: true #The nocopy modifier is for when you are creating a volume and data already exists in the container's path, you can specify if you want that data copied when the volume is created.

volumes:
  db-data:
    external: true # the external flag allows you to use volumes created outside the scope of the docker-compose file

0
投票
#Mongo Dockerfile
FROM alpine:edge

MAINTAINER "loko" <[email protected]>

# proxy settings
ARG http_proxy=http://your-corporate-proxy-if-is-need-it/
ARG https_proxy=http://your-corporate-proxy-if-is-need-it/
ARG no_proxy=localhost,127.0.0.0/8,::1,15.0.0.0/8,16.0.0.0/8

ADD run /
ADD dosu /sbin/

RUN chmod +x /sbin/dosu && \
  echo http://dl-4.alpinelinux.org/alpine/edge/testing >> /etc/apk/repositories && \
  apk add --no-cache mongodb

VOLUME /data/db
EXPOSE 27017 28017

ENTRYPOINT [ "/run" ]
CMD [ "mongod" ]

Docker 组合

version: '2.0'

volumes:
  data:
    external:
      name: "the-volume-name-you-want"
services:
     web:
       build:
         context: .
         dockerfile: "Dockerfile"
         args:
           - HTTP_PROXY
           - HTTPS_PROXY
           - http_proxy
           - https_proxy
           - no_proxy
           - NO_PROXY
       image: "docker-hub-OR-your-built-image-name"
       environment:
          - http_proxy=$http_proxy
          - https_proxy=$https_proxy
          - no_proxy=$no_proxy
          - HTTP_PROXY=$HTTP_PROXY
          - HTTPS_PROXY=$HTTPS_PROXY
          - NO_PROXY=$NO_PROXY
       ports:
         - "8080"
       restart: always
       depends_on:
         - mongo
     mongo:
       image: "your-favorite-mongodb-image-name"
       environment:
          - http_proxy=$http_proxy
          - https_proxy=$https_proxy
          - no_proxy=$no_proxy
          - HTTP_PROXY=$HTTP_PROXY
          - HTTPS_PROXY=$HTTPS_PROXY
          - NO_PROXY=$NO_PROXY
       restart: always
       volumes:
         - data:/data/db

构建并运行

docker-compose build .
docker-compose up

0
投票

截至今天,这是工作的 docker compose

yaml
文件,用于将 docker 卷与 mongo 图像一起使用:

version: '3.1'
services:
  mongo:
    image: mongo
    restart: always
    ports:
      - 27017:27017
    volumes:
      - type: volume
        source: mongo-data
        target: /data/db
        volume:
          nocopy: true 
    # environment:
    #   MONGO_INITDB_ROOT_USERNAME: root
    #   MONGO_INITDB_ROOT_PASSWORD: example

  mongo-express:
    image: mongo-express
    restart: always
    ports:
      - 8081:8081
    environment:
      # ME_CONFIG_MONGODB_ADMINUSERNAME: root
      # ME_CONFIG_MONGODB_ADMINPASSWORD: example
      ME_CONFIG_MONGODB_URL: mongodb://mongo:27017/
volumes:
  mongo-data:
    driver: local
© www.soinside.com 2019 - 2024. All rights reserved.