【发布时间】:2020-05-01 21:41:27
【问题描述】:
我设置了一个为静态网站提供资产的 Nginx 容器。这个想法是让网络服务器始终保持运行,并在重新编译时覆盖资产。目前 docker 设置如下所示:
docker-compose.yml:
version: '3'
services:
web:
build: ./app
volumes:
- site-assets:/app/dist:ro
nginx:
build: ./nginx
ports:
- 80:80
- 443:443
volumes:
- site-assets:/app:ro
- https-certs:/etc/nginx/certs:ro
depends_on:
- web
volumes:
site-assets:
https-certs:
Web(资产构建器)Dockerfile:
FROM node:latest
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY ./ .
RUN npm run generate
Nginx Dockerfile:
FROM nginx:latest
RUN mkdir /app
COPY nginx.conf /etc/nginx/nginx.conf
certbot 容器是单独管理的,与我遇到的问题无关,但 Nginx 容器确实需要能够挂载 https-certs 卷。
这个设置似乎很好,直到我意识到站点资产卷在第一次创建后不会更新。需要在每个应用程序部署上销毁并重新创建卷才能使其正常工作,需要停止 Nginx 容器以卸载卷。这种方法就这么多。
有没有办法在不关闭 Nginx 容器的情况下管理此设置中的应用程序数据?最好,我希望使用 docker-compose 文件以声明方式执行此操作,避免使用 multiple application instances,因为这不需要扩展,并避免使用 docker inspect 在文件系统上查找卷并直接修改它。
我希望除了“这是一个静态站点,你为什么不使用 Netlify 或 GitHub Pages?”之外,还有一个理智的答案。 :)
【问题讨论】:
-
您能否说明您希望如何更新资产?在构建期间,该卷不可用。您希望在运行时执行此操作。这当然是可能的(我可能可以分享一个例子)。但目前尚不清楚您目前是如何尝试的。一些命令可能有助于说明。
-
@AndyShinn
docker-compose -H ssh://myserver build; docker-compose -H ssh://myserver up -d暂时,虽然我可能会设置一个 CD 管道来处理这个提交。
标签: docker nginx docker-compose static-site