如何在两个服务之间共享 docker 音量,其中一个是真实来源?
How to share docker volume between two services with one being the source of truth?
我的 docker-compose 中有两个服务:
version: '3.9'
services:
web:
build:
context: .
ports:
- 8080:8080
links:
- php
volumes:
- "html:/usr/share/nginx/html/"
php:
env_file:
- ".env"
image: php:7-fpm
volumes:
- "html:/usr/share/nginx/html/"
volumes:
html:
和一个 Dockerfile:
FROM nginx:alpine
COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY public_html/* /usr/share/nginx/html/
但是当我 运行 docker-compose up --build
它不更新卷中的文件。我必须删除 public_html
中文件的卷才能更新这两项服务。
docker-compose 中的 volumes
优先于您在 Dockerfile 中添加的文件。
这些容器不会获取您尝试添加到 Dockerfile 中的内容 - 它们会从您主机中的 html
卷中获取内容。
这是两种不同的技术 - 安装卷与将文件添加到 Dockerfile
中的图像。
一个不使用 volumes
的解决方案可能是每次都构建两个图像:
PhpDockerfile
内容:
FROM php:7-fpm
COPY public_html/* /usr/share/nginx/html/
和 docker-compose.yml
:
version: '3.9'
services:
web:
build:
context: .
ports:
- 8080:8080
links:
- php
php:
env_file:
- ".env"
build:
context: .
dockerfile: PhpDockerfile
编辑:
第二种方法,使用卷而不是在 dockerfile
中添加它们(会更快,因为您不必每次都构建,更适合开发环境):
version: '3.9'
services:
web:
build:
context: .
ports:
- 8080:8080
links:
- php
volumes:
- "./public_html/:/usr/share/nginx/html/"
php:
env_file:
- ".env"
image: php:7-fpm
volumes:
- "./public_html/:/usr/share/nginx/html/"
然后你可以删除
COPY public_html/* /usr/share/nginx/html/
来自你的 dockerfile
。
请注意,您可能需要在 docker-compose
文件中使用完整路径而不是相对路径。
我的 docker-compose 中有两个服务:
version: '3.9'
services:
web:
build:
context: .
ports:
- 8080:8080
links:
- php
volumes:
- "html:/usr/share/nginx/html/"
php:
env_file:
- ".env"
image: php:7-fpm
volumes:
- "html:/usr/share/nginx/html/"
volumes:
html:
和一个 Dockerfile:
FROM nginx:alpine
COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY public_html/* /usr/share/nginx/html/
但是当我 运行 docker-compose up --build
它不更新卷中的文件。我必须删除 public_html
中文件的卷才能更新这两项服务。
docker-compose 中的 volumes
优先于您在 Dockerfile 中添加的文件。
这些容器不会获取您尝试添加到 Dockerfile 中的内容 - 它们会从您主机中的 html
卷中获取内容。
这是两种不同的技术 - 安装卷与将文件添加到 Dockerfile
中的图像。
一个不使用 volumes
的解决方案可能是每次都构建两个图像:
PhpDockerfile
内容:
FROM php:7-fpm
COPY public_html/* /usr/share/nginx/html/
和 docker-compose.yml
:
version: '3.9'
services:
web:
build:
context: .
ports:
- 8080:8080
links:
- php
php:
env_file:
- ".env"
build:
context: .
dockerfile: PhpDockerfile
编辑:
第二种方法,使用卷而不是在 dockerfile
中添加它们(会更快,因为您不必每次都构建,更适合开发环境):
version: '3.9'
services:
web:
build:
context: .
ports:
- 8080:8080
links:
- php
volumes:
- "./public_html/:/usr/share/nginx/html/"
php:
env_file:
- ".env"
image: php:7-fpm
volumes:
- "./public_html/:/usr/share/nginx/html/"
然后你可以删除
COPY public_html/* /usr/share/nginx/html/
来自你的 dockerfile
。
请注意,您可能需要在 docker-compose
文件中使用完整路径而不是相对路径。