问题 如何使用docker-compose和docker-machine为mongoDB安装外部卷


我想坚持下去 mongoDB 容器外部和指定卷上的数据。我正在使用docker-compose和yml文件看起来像

web:
  build: .
  command: python -u app.py
  ports:
    - "5000:5000"
  volumes:
    - .:/todo
  links:
    - db
db:
  image: mongo:3.0.2

11982
2017-12-21 06:46


起源

什么版本?看起来可能是2.我正在寻找关于版本3的信息。 - Dagrooms
@Dagrooms:你能找到吗?我试过,但数据不会持久存在主机上 - aman_novice


答案:


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

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

哪个将使用主机路径 ./data


8
2017-12-22 00:06



我有这个 web: build: . command: python -u app.py ports: - "5000:5000" volumes: - .:/todo links: - db db: image: mongo:3.0.2 volumes: - ./data:/data/db 但是mongo容器没有启动,似乎它抱怨它没有./data文件夹的写权限。它说: 2015-12-27T06:55:19.002 + 0000我在initAndListen中存储[initandlisten]异常:98无法创建/打开锁定文件:/data/db/mongod.lock errno:13权限被拒绝mongod实例是否已经运行?终止 我不知道问题是什么 - casra
问题是文件权限。 Mongo可能以mongo用户身份运行,该用户与用户的权限不同。 - dnephin
但** /data/db/mongod.lock**在容器内,而不在我的主机上。不是吗 卷: - ./data:/data/db*表示** / data / db 容器的容量是否与主机的** ./data **相同​​? - casra
并且如果问题是你所说的权限:“来自容器内部的mongo没有权限在本地磁盘上写入”;我怎样才能解决这个问题?如果是这种情况,那么使用yml文件指定用户权限的标准方法是什么? - casra
是的,该卷配置告诉容器使用主机路径 /data/db 容器中的路径。您可以使用mongo配置更改来移动锁定文件,但也许它应该与数据本身位于相同的路径中。您可以使用修复权限 chown 要么 chmod 在主持人。用户标识需要与容器中的mongo用户标识匹配,或者您可以为所有用户提供 +wx 在目录中。 - dnephin


我想你试图在像我这样的OSX系统上启动容器? joshuajabbour指出,主机卷目录不能位于/ Users(或〜)下 这里

试试这个例子

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

8
2018-01-20 15:03





#Mongo Dockerfile
FROM alpine:edge

MAINTAINER "loko" <binario200@gmail.com>

# 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
2017-09-29 21:45