我正在使用Docker Compose和卷
version: '2'
services:
php-apache:
env_file:
- dev_variables.env
image: reypm/php55-dev
build:
context: .
args:
- PUID=1000
- PGID=1000
expose:
- "80"
- "9001"
extra_hosts:
# IMPORTANT: Replace with your Docker Host IP (will be appended to /etc/hosts)
- "dockerhost:xxx.xxx.xxx.xxx"
volumes_from:
- volumes_source
volumes_source:
image: tianon/true
volumes:
- ../:/var/www
volumes_data:
image: tianon/true
volumes:
- ./data/sessions:/sessions
让我们采取以下事实:
~/var/www
/var/www
我已阅读文档here,但我不清楚如何处理数据量和主机数据。
我想与容器共享主机上的数据,但我甚至不知道上面的docker-compose.yml
文件是正确的还是需要更改的内容才能实现我的需要。我知道如何单独使用docker run
但不知道Docker Compose的线索吗?
能帮我解决这个问题吗?
更新:使用此
我已将此行添加到docker-compose.yml
文件中:
volumes_from:
- volumes_source
我再次运行docker-compose up
,但结果就是这样:
php55devwork_volumes_data_1 exited with code 0
php55devwork_volumes_source_1 exited with code 0
我不确定发生了什么或者我为什么会收到错误?
答案 0 :(得分:24)
看起来您正在尝试定义“数据容器”。这种模式过去很常见,但在Docker 1.9(https://github.com/docker/docker/blob/master/CHANGELOG.md#190-2015-11-03)中添加docker volume
系统之后,这不是必需的。
您正在使用的此图像tianon/true
旨在运行“true”命令,除了返回退出代码0之外什么都不做,然后退出。这就是容器显示为退出的原因。
使用命名卷,而不是使用数据容器。例如,以下方法使用数据容器:
docker create --name data-container -v /sessions tianon/true
docker run --volume-from data-container -d myapp
成为这个:
docker volume create --name sessions
docker run -v sessions:/sessions -d myapp
由于您正在使用compose,因此可以使用volume key定义卷。
version: '2'
services:
php-apache:
env_file:
- dev_variables.env
image: reypm/php55-dev
build:
context: .
args:
- PUID=1000
- PGID=1000
expose:
- "80"
- "9001"
extra_hosts:
# IMPORTANT: Replace with your Docker Host IP (will be appended to /etc/hosts)
- "dockerhost:xxx.xxx.xxx.xxx"
volumes:
- sessions:/sessions
- docroot:/var/www
volumes:
sessions:
driver: local
docroot:
driver: local
详细信息和示例位于:https://docs.docker.com/compose/compose-file/compose-file-v2/
但是,您还提到要在容器和主机之间共享此卷数据。在这种情况下,既不需要数据容器也不需要命名卷。您可以直接指定主机卷:
version: '2'
services:
php-apache:
env_file:
- dev_variables.env
image: reypm/php55-dev
build:
context: .
args:
- PUID=1000
- PGID=1000
expose:
- "80"
- "9001"
extra_hosts:
# IMPORTANT: Replace with your Docker Host IP (will be appended to /etc/hosts)
- "dockerhost:xxx.xxx.xxx.xxx"
volumes:
- ./data/sessions:/sessions
- ../:/var/www