我的mac上的本地文件夹中有一个docker compose文件。我还有另一个文件夹/ src,它应该作为根元素。 docker-compose文件如下所示:
version: '2'
services:
fpm:
image: sbusso/php-fpm-ion
nginx:
image: nginx:stable
ports:
- "80:80"
links:
- fpm
- db
db:
image: orchardup/mysql
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: myproject
我理解我们在这里做了什么,但我错过了/ src作为root的解决方案,我想我需要设置一个lsync服务,它在本地和我的docker容器之间进行同步。所以我发现了这个,但它没有正常工作 - root / src没有考虑在内。我只想在浏览器中键入localhost,它应该打开/ src文件夹。
version: '2'
services:
fpm:
image: sbusso/php-fpm-ion
links:
- sync
volumes_from:
- sync
db:
image: orchardup/mysql
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: myproject
links:
- sync
volumes_from:
- sync
nginx:
image: nginx:stable
ports:
- "80:80"
links:
- sync
volumes_from:
- sync
sync:
image: zeroboh/lsyncd
volumes:
- /var/www/html
- ./src:/src:Z
- ./docker-config/nginx:/etc/nginx/conf.d
- /var/lib/php/session
- ./docker-config/lrsync/lrsync.lua:/etc/lrsync/lrsync.lua
- ./sync:/sync
我所理解的是,每个加载的图像都会将同步服务链接到其中。我不明白的是为什么每个图像都需要一个volumes_from并且同步的语法明确地说 - 有人可以帮助我,正确设置吗?
谢谢
答案 0 :(得分:1)
volumes_from
从另一个容器导入卷默认情况下,每个容器都没有卷。您可以使用volumes
属性定义本地卷,但卷仅用于该容器。为了使其他容器能够使用它们,这些容器必须使用volumes_from
导入卷,指向一个或多个容器的名称。然后,在当前容器中可以使用这些命名容器中的所有卷。
Z
卷标指示私有卷您正在使用以下代码装载/src
卷:
volumes:
- ./src:/src:Z
没关系,除了您还使用volumes_from
之外,您的问题表明您特意想要分享/src
。但是通过使用Z
标签,您告诉Docker将其设为私有卷。
卷标
SELinux等标签系统要求在装入容器的卷内容上放置适当的标签。如果没有标签,安全系统可能会阻止容器内运行的进程使用内容。默认情况下,Docker不会更改操作系统设置的标签。
要更改容器上下文中的标签,您可以将两个后缀
:z
或:Z
中的任意一个添加到卷装入。这些后缀告诉Docker重新标记共享卷上的文件对象。 z选项告诉Docker两个容器共享卷内容。因此,Docker使用共享内容标签标记内容。共享卷标签允许所有容器读/写内容。 Z选项告诉Docker使用私有非共享标签标记内容。只有当前容器才能使用私有卷。
在这种情况下,“当前容器”为sync
,因此只有该容器可以使用该卷。其他人可能不会使用它。