Docker / Docker-组合卷文件和共享问题
Docker / Docker-compose volume fill & share issue
我有几个关于 Docker 卷的问题。我已经在新主机 运行 debian stretch 上安装了 Docker 和 docker-compose。我设法为一个简单的 nginx/php-fpm 项目获得了一个 docker-compose 文件 运行,两个容器都安装在包含源代码的目录中。我想尝试创建一个将在我的容器之间共享的单个卷,但我遇到了一些问题,而且我对官方文档的理解也无济于事。
所以这是我想要实现的想法:
问题 1:尝试从主机
装载的目录中的docker文件创建卷
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-project-directory 中的所有文件。
如果我 ls 容器上 /project 的内容我可以看到来自主机的文件,但是使用 docker volume list,主机上没有创建任何卷,为什么?
问题 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 目录48=]。
现在,如何使用 ./host-project-directory 中的内容填充此卷?
我试过添加 docker 文件,例如
ADD ./host-project-directory /project
但没有任何变化,卷仍然是空的。
如果这是因为我缺乏使用经验,我很抱歉 Docker 但我不知道如何让这个简单的东西起作用。
感谢您的宝贵时间!
对于第一个问题,我尝试了一个简单的 docker 文件,如下所示:
FROM php:7-fpm
COPY ./project /project
还有一个 docker-这样写:
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:
执行上面的示例,我的本地 "project" 文件夹中的容器内有文件。
请检查本地文件夹路径是否正确。
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
我有几个关于 Docker 卷的问题。我已经在新主机 运行 debian stretch 上安装了 Docker 和 docker-compose。我设法为一个简单的 nginx/php-fpm 项目获得了一个 docker-compose 文件 运行,两个容器都安装在包含源代码的目录中。我想尝试创建一个将在我的容器之间共享的单个卷,但我遇到了一些问题,而且我对官方文档的理解也无济于事。
所以这是我想要实现的想法:
问题 1:尝试从主机
装载的目录中的docker文件创建卷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-project-directory 中的所有文件。 如果我 ls 容器上 /project 的内容我可以看到来自主机的文件,但是使用 docker volume list,主机上没有创建任何卷,为什么?
问题 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 目录48=]。 现在,如何使用 ./host-project-directory 中的内容填充此卷? 我试过添加 docker 文件,例如
ADD ./host-project-directory /project
但没有任何变化,卷仍然是空的。
如果这是因为我缺乏使用经验,我很抱歉 Docker 但我不知道如何让这个简单的东西起作用。
感谢您的宝贵时间!
对于第一个问题,我尝试了一个简单的 docker 文件,如下所示:
FROM php:7-fpm
COPY ./project /project
还有一个 docker-这样写:
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:
执行上面的示例,我的本地 "project" 文件夹中的容器内有文件。
请检查本地文件夹路径是否正确。
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