Docker-Compose:如何将卷从主机映射到容器? [英] Docker-Compose: how to mapping volume from host into container?
问题描述
我想使用docker-compose与特定容器共享docker主机上的文件夹.运行MongoDB的容器应将其数据文件放入/var/lib/mongodb,但此文件夹应为主机文件夹/var/lib/mongodb的安装.
I'd like to share a folder from the docker host with a specific container using docker-compose. A container running MongoDB shall place its data files into /var/lib/mongodb, but this folder shall be a mount to the hosts folder /var/lib/mongodb.
但是它仍然是容器内自己的本地目录,而不是主机上的共享目录.
But it still remains an own local directory within the container, not the shared one from the host.
有时它还会出现以下警告:
Sometimes it also ends up with the following warning:
警告:服务"mongodb"正在使用来自以下位置的卷"/var/lib/mongodb": 先前的容器.主机映射"name_dbvolume"无效. 删除现有容器(使用
docker-compose rm mongodb
)以 使用主机卷映射.
WARNING: Service "mongodb" is using volume "/var/lib/mongodb" from the previous container. Host mapping "name_dbvolume" has no effect. Remove the existing containers (with
docker-compose rm mongodb
) to use the host volume mapping.
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"]
mongodb容器配置为MongoDB使用/var/lib/mongodb作为数据目录.通过以下命令,我们尝试从主机使用此文件夹:
The mongodb-container is configured that MongoDB uses /var/lib/mongodb as data directory. With the following command we try to use this folder from the host:
VOLUME ["/var/lib/mongodb"]
VOLUME [ "/var/lib/mongodb" ]
我在这里错了什么?
推荐答案
您的撰写配置会设置名为dbvolume
Your compose config sets up a named data volume called dbvolume
默认情况下,已命名的卷将存储在/var/lib/docker
中:
A named volume will be stored in /var/lib/docker
by default:
→ 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 is slightly different in a compose file.
volumes:
- /var/lib/mongodb:/var/lib/mongodb
源仍然在左侧,但是您指定完整路径而不是名称.
The source is still on the left, but you specify the full path instead of a name.
这篇关于Docker-Compose:如何将卷从主机映射到容器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!