如何配置nginx和我的客户端应用(ember)来获取文件更改?
修改:
我想要共享一个卷,我需要在docker-compose文件中指定具有相同路径的卷。
我在nginx和我的前端应用程序之间安装了共享卷(可能是?),但是在前端应用程序中进行的更改不会在nginx中被选中,除非我重建了docker容器。我已经阅读了很多问题,解决方案归结为一个问题。分享量(我已经完成)b。在nginx中设置服务文件(它是):
docker-compose.yml
version: "3"
services:
client:
build: "./client"
command: npm start
env_file:
- .env-dev
ports:
- "4200:4200"
- "35730:35730"
volumes:
- /var/www/app/client
- /var/www/app/client/node_modules
- .:/client
nginx:
build: ./nginx
env_file: .env-dev
volumes:
- /var/www/app/nginx
depends_on:
- client
networks:
- clientnet
ports:
- "80:80"
networks:
clientnet:
driver: bridge
nginx.conf
events {
worker_connections 1024;
}
http {
log_format compression '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" "$gzip_ratio"';
gzip on;
gzip_http_version 1.0;
gzip_proxied any;
gzip_min_length 500;
gzip_disable "MSIE [1-6]\.";
gzip_types text/plain text/xml text/css
text/comma-separated-values
text/javascript
application/x-javascript
application/atom+xml;
upstream client_app {
server client:4200;
}
server {
sendfile off;
listen 80;
root /var/www/app/client/public;
# Match frontend client
location =/ {
proxy_pass http://client_app;
}
# Match assets
location ~* \.(?:ico|css|js|gif|jpe?g|png|woff2|woff|ttf)$ {}
}
}
我错过了什么?
答案 0 :(得分:1)
您使用的是Docker Swarm吗?在v2.x Compose文件中执行此操作的方法是向event.detail.response
服务添加volumes_from
密钥以加载nginx
上声明的卷。我还没有使用v3.x Compose文件,但我认为你可以通过声明一个命名卷来包含你的app数据,并在两个容器中挂载这个命名卷来做类似的事情。您可以将文件从应用程序容器复制到容器入口点脚本中的卷。
答案 1 :(得分:1)
可以在本地开发中考虑命名卷。但是在生产中,特别是在使用Swarm时,最好使用多阶段构建来在nginx中插入前端静态文件夹。因为使用卷将是更新的反模式(当您执行docker pull
时时,您的前端更改不会反映出来。)
我还建议您在本地编码时使用绑定挂载,以便在主机和容器中的文件之间进行实时更改,如:
nginx:
restart: always
image: nginx:alpine
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./django/static:/usr/src/app/static
- ./django/media:/usr/src/app/media