我试图理解 - 也许我已经做过 - 可能是volumes_from
文件中volumes
和docker-compose.yml
用法之间的差异。我已经阅读了文档但是从那里开始我并不那么清楚,所以我正在做一个真正的练习。
我有以下设置:
php-apache
的目录,根目录Dockerfile
mongo
的目录,根目录Dockerfile
docker-compose.yml
文件注意:如果您不清楚,请查看here,下面显示的所有内容也都在那里(
mongodb-test
分支)
在php-apache/Dockerfile
我有以下条目:
VOLUME /data /data
在mongo/Dockerfile
我有以下条目:
VOLUME /data/db /data/configdb
在docker-compose.yml
我有以下内容:
version: '2'
services:
php-apache:
container_name: "php55-dev"
image: reynierpm/php55-dev
ports:
- "80:80"
environment:
PHP_ERROR_REPORTING: 'E_ALL & ~E_DEPRECATED & ~E_NOTICE'
volumes:
- ~/mmi:/var/www
volumes_from:
- volumes_data
mongo:
container_name: "mongodb"
image: reynierpm/mongodb
ports:
- "27017:27017"
volumes_from:
- volumes_data
volumes_data:
image: tianon/true
volumes:
- ~/data/mongo:/data/db
- ~/data:/data
这是我从该设置中理解的内容:
reynierpm/php55-dev
会公开/data
目录,并将其映射到~data:/data
图片tianon/true
reynierpm/mongodb
会向外部展示/data/db
并在内部映射到/data/configdb
,然后/data/db
会映射到~/data/mongo:/data/db
tianon/true
} image。现在我脑子里一团糟,因为我想要实现的目标如下:
<path_on_host>:/var/www
上的这一行docker-compose.yml
)那么,我正在做什么呢?由于我还在学习,请随意在此设置中进行任何修改。
答案 0 :(得分:0)
图片reynierpm / php55-dev将公开一个/ data目录,这将被映射到~data:/ data in tianon / true image
最好说它会映射到docker主机上的~/data
。请注意,第二卷也会有/data/db
。
图像reynierpm / mongodb将/ data / db暴露给外部并在内部映射到/ data / configdb然后/ data / db映射到〜/ data / mongo:/ data / db in tianon / true image
就容量来说,这个容器与php-apache相同 volume_data容器。
如果您的目标是:
如果你的代码在~/mni/
,你就可以了。你正在将mongoDB数据库目录挂载到php-apache容器,我认为你不需要它。
您需要为容器连接或链接容器(旧版)创建user defined network
。要创建用户定义的网络:
docker network create --driver bridge <yournetwork name>
您不需要DOC。这就是我删除第三个容器的原因。我还修复了不必要的卷映射。
更新了Docker文件:
version: '2'
services:
php-apache:
container_name: "php55-dev"
image: reynierpm/php55-dev
ports:
- "80:80"
environment:
PHP_ERROR_REPORTING: 'E_ALL & ~E_DEPRECATED & ~E_NOTICE'
volumes:
- ~/mmi:/var/www
volumes_from:
- volumes_data
mongo:
container_name: "mongodb"
image: reynierpm/mongodb
ports:
- "27017:27017"
volumes_from:
- volumes_data
volumes_data:
image: tianon/true
volumes:
- ~/data/mongo:/data/db
- ~/data:/data
networks:
default:
external:
name: <your network name>
请注意,在您的情况mongodb
中,您必须通过其名称从您的网络应用程序中调用您的mongo容器。