我对Docker卷有一些疑问。我已经在运行debian Stretch的新主机上安装了Docker和docker-compose。我设法为一个简单的nginx / php-fpm项目运行了一个docker-compose文件,两个容器都安装在包含源代码的目录中。我想尝试创建一个可以在我的容器之间共享的单一卷,但是我遇到了一些问题,而我对官方文档的理解无济于事。
所以这是我要实现的目标的想法:
问题1:尝试通过从主机挂载的目录中的dockerfile创建卷
docker-compose.yml:
version: '3'
services:
php:
build:
context: .
dockerfile: php.dockerfile
volumes:
- ./host-project-directory:/project
php.dockerfile:
FROM php:7-fpm
VOLUME project
根据我的理解,在运行docker-compose时,我们应该在主机上创建一个包含来自容器中/ project中所有文件的卷。并且来自容器的/ project应该包含来自host的./host-project-directory中的所有文件。 如果我将/ project的内容放在容器中,则可以从主机上看到文件,但是使用 docker卷列表,主机上没有创建任何卷,为什么?
问题2:如何从另一个容器填充和使用该卷?
version: '3'
services:
php:
build:
context: .
dockerfile: php.dockerfile
volumes:
- named-volume:/project
web:
image: nginx
links:
- php
volumes:
- named-volume:/project
volumes:
named-volume:
这应该创建一个名为“ named-volume”的卷,并将其绑定到两个容器 php 和 web 上的/ project目录。 现在,如何用./host-project-directory中的内容填充此卷? 我尝试添加类似
的dockerfileADD ./host-project-directory /project
但没有任何变化,音量保持为空。
很抱歉,这是由于我缺乏使用Docker的经验,但是我不知道如何使这个简单的事情起作用。
谢谢您的时间!
答案 0 :(得分:3)
对于第一个问题,我尝试一个简单的docker文件,如下所示:
FROM php:7-fpm
COPY ./project /project
和这样的docker-compose:
version: '3'
services:
php:
build: .
volumes:
- named-volume:/project
web:
image: nginx
links:
- php
volumes:
- named-volume:/project
volumes:
named-volume:
由于您是在docker-compose上创建卷的,因此无需在Dockerfile中创建该卷。 运行docker卷列表,我可以看到使用本地驱动程序创建的卷。使ls进入文件夹,我也可以看到该文件。需要注意的重要一点是,本地目录中存在的文件与容器中的文件不同。因此,如果您在主机中编辑文件,则不会更改容器中的文件。那是因为您在另一个路径中创建了卷,可能在以下位置:/ var / lib / docker / volumes / ... 发生这种情况是因为您将卷映射到路径,但未指定要在何处卷。为此,只需使您的docker-compose像这样:
version: '3'
services:
php:
build: .
volumes:
- ./project:/project
web:
image: nginx
links:
- php
volumes:
- ./project:/project
这样做,我仍然可以通过volume list命令看到卷,但是没有名称。 所以我不知道为什么您看不到列表中的音量。
问题2:
在上面的示例中,我将文件保存在本地“项目”文件夹中的容器中。
请检查本地文件夹的路径是否正确。
答案 1 :(得分:2)
A bind mount is not the same thing as a volume。您在此处定义命名卷,但需要绑定安装的功能。
尝试一下
version: '3'
services:
php:
build:
context: .
dockerfile: php.dockerfile
volumes:
- ./host-project-directory:/project
web:
image: nginx
links:
- php
volumes:
- ./host-project-directory:/project