docker - Docker / Docker-compose 卷填充和共享问题
问题描述
我有几个关于 Docker 卷的问题。我已经在运行 debian 的新主机上安装了 Docker 和 docker-compose。我设法为一个简单的 nginx/php-fpm 项目运行了一个 docker-compose 文件,这两个容器都安装在包含源代码的目录上。我想尝试创建一个可以在我的容器之间共享的单个卷,但是我遇到了一些问题,而且我对官方文档的理解没有帮助。
所以这是我想要实现的一个想法:
问题 1:尝试从主机挂载的目录上的 dockerfile 创建卷
码头工人-compose.yml :
version: '3'
services:
php:
build:
context: .
dockerfile: php.dockerfile
volumes:
- ./host-project-directory:/project
php.docker 文件:
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 目录。 现在,如何使用 ./host-project-directory 中的内容填充此卷? 我试过添加一个像
ADD ./host-project-directory /project
但什么都没有改变,卷仍然是空的。
如果这是因为我缺乏使用 Docker 的经验,我很抱歉,但我不知道如何让这个简单的事情发挥作用。
感谢您的时间 !
解决方案
对于第一个问题,我尝试了一个简单的 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 volume list,我可以看到使用本地驱动程序创建的卷。在文件夹中制作 ls 我也可以看到该文件。需要注意的是,本地目录中的文件与容器内的文件不同。因此,如果您编辑主机中的文件,这不会更改容器中的文件。那是因为您在另一个路径中创建了卷,可能位于:/var/lib/docker/volumes/... 这是因为您将卷映射到路径,但没有指定卷的位置。要做到这一点,只需让你的 docker-compose 像这样:
version: '3'
services:
php:
build: .
volumes:
- ./project:/project
web:
image: nginx
links:
- php
volumes:
- ./project:/project
这样做我仍然可以使用卷列表命令查看卷,但没有名称。所以我不知道你为什么看不到列表中的音量。
对于问题 2:
执行上面的示例,我在本地“项目”文件夹中存在容器内的文件。
请检查本地文件夹的路径是否正确。
推荐阅读
- python - flattened dictionary into nested dictionary of dictionaries of lists
- javascript - 如何将全栈应用程序部署到 heroku 或 netlify?哪些文件是必需的?
- php - Laravel 路由方法问题
- paho - 物联网边缘证书位置
- node.js - 订阅方法不适用于角度
- javascript - 如何在反应中进行表单验证?
- c++ - 如何让 nrFToolbox for BLE 应用程序使用使用 ArduinoBLE 库编写的 Arduino 代码?
- c - Zephyr 和亚马逊网络服务在 mqtt_input 失败
- phpmyadmin - 在服务器 debian 8 上删除 php-5.6
- mpi - 当端口暴露时,docker swarm 中的 MPI 不起作用