Docker – 如何设置本地web服务器

我有一个泊坞窗撰写文件在我的Mac上的本地文件夹。 我还有另一个文件夹/ 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 

我明白我们在这里做什么,但我缺less以/ src作为根的解决scheme,我想我需要设置一个lsync服务,在本地和我的docker容器之间进行同步。 所以我find了这个,但它不能正常工作 – 根/ src没有考虑到。 我只想在浏览器中inputlocalhost,并打开/ 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 

我所知道的是每个加载的图像都将同步服务链接到它。 我不明白的是为什么每个图像都需要一个volume_from,并且同步的语法明确地说 – 有人能帮助我,正确地设置它吗?

谢谢

volumes_from从另一个容器导入卷

默认情况下,每个容器都没有卷。 您可以使用volumes属性定义本地卷,但卷仅在该容器中使用。 为了使其他容器能够使用这些容器,这些容器必须使用volumes_from导入容器,指向一个或多个容器的名称。 这些指定容器中的所有卷都将在当前容器中可用。

Z卷标签表示私密卷

你正在使用这个来挂载/src卷:

 volumes: - ./src:/src:Z 

这很好,除了你也使用volumes_from ,你的问题表明你特别想共享/src 。 但是通过使用Z标签,你已经告诉Docker把它作为一个私有卷。

从文档 :

卷标

像SELinux这样的标签系统要求在安装到容器中的卷内容上放置正确的标签。 如果没有标签,安全系统可能会阻止容器内运行的进程使用内容。 默认情况下,Docker不会更改OS设置的标签。

要更改容器上下文中的标签,可以将两个后缀之一:z:Z到卷装载。 这些后缀告诉Docker重新标记共享卷上的文件对象。 z选项告诉Docker两个容器共享卷内容。 因此,Docker使用共享内容标签来标记内容。 共享卷标允许所有容器读取/写入内容。 Z选项告诉Docker用私有的非共享标签来标记内容。 只有当前容器可以使用私人卷。

在这种情况下,“当前容器”是sync ,所以只有该容器可以使用该容量。 其他人可能不会使用它。