我想将
mongoDB
数据保留在容器之外的指定卷上。我正在使用 docker-compose ,yml 文件看起来像
web:
build: .
command: python -u app.py
ports:
- "5000:5000"
volumes:
- .:/todo
links:
- db
db:
image: mongo:3.0.2
如该映像的 docker hub 页面上所述(https://hub.docker.com/_/mongo/),您可以使用
volumes:
- './data:/data/db'
它将使用主机路径
./data
我想你会像我一样尝试在 OSX 系统上启动容器吗?正如 joshuajabbour 指出的那样,主机卷目录不能位于 /Users(或 ~)下here。
尝试例如
volumes:
- /usr/local/mongodb:/todo
使用您的文件
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
不要忘记使用环境变量:
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: fw324fe
我遇到了同样的问题,我在 Windows 10 中使用 docker 并使用 WSL 2 与 ubuntu 集成,我只能通过输入完整路径来解决问题:
volumes:
- /home/you_user/mongoDocker/docker:/data/db
此文档帮助了我: 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
#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" ]
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
截至今天,这是工作的 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