如何让dockerized nginx从其他容器

时间:2017-08-15 05:36:53

标签: docker nginx

如何配置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)$ {}
    }
}

我错过了什么?

2 个答案:

答案 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