如何使dockerized nginx从其他容器中获取文件更改

我怎样才能configurationnginx和我的客户端应用程序(烬)来获取文件的变化?

编辑

我在想共享一个卷,我需要指定在docker-compose文件中具有相同path的卷。

我已经在nginx和我的前端应用程序之间挂载了共享卷(也许?),但在前端应用程序中所做的更改不会在nginx中find,除非我重新构build了docker容器。 我读过很多问题,解决scheme归结为一个。 份额(我已经完成)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)$ {} } } 

我错过了什么?

在本地开发中可以考虑命名卷。 但是在生产时尤其是使用Swarm的时候,最好使用多阶段构build在nginx中插入你的前端静态文件夹。 因为使用卷将成为更新的反模式(当您执行docker pull时,前端的更改不会反映出来)

我也build议你在本地进行编码时使用绑定挂载,以便在主机和容器中的文件之间进行实时更改,例如:

 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 

你在使用Docker Swarm吗? 简单地在v2.x Compose文件中执行此操作的方法是将卷volumes_from键添加到nginx服务以加载在client声明的卷。 我还没有使用v3.x撰写文件,但是我认为你可以通过声明一个命名卷来包含你的应用程序数据,并在两个容器中装入这个命名卷来做类似的事情。 您可以将文件从应用程序容器复制到容器入口点脚本中的卷。