Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 如何让停靠的nginx从其他容器中获取文件更改_Docker_Nginx - Fatal编程技术网

Docker 如何让停靠的nginx从其他容器中获取文件更改

Docker 如何让停靠的nginx从其他容器中获取文件更改,docker,nginx,Docker,Nginx,如何配置nginx和我的客户端应用程序(ember)以获取文件更改? 编辑: 我认为要共享一个卷,我需要指定在docker compose文件中具有相同路径的卷 我已经在nginx和我的前端应用程序之间装载了共享卷(可能?),但是在前端应用程序中所做的更改不会在nginx中被获取,除非我重新构建docker容器。我读了很多问题,答案归结为a。共享卷(我已经完成)b。在nginx中设置serve file off(它是): docker compose.yml version: "3" serv

如何配置nginx和我的客户端应用程序(ember)以获取文件更改?

编辑

我认为要共享一个卷,我需要指定在docker compose文件中具有相同路径的卷

我已经在nginx和我的前端应用程序之间装载了共享卷(可能?),但是在前端应用程序中所做的更改不会在nginx中被获取,除非我重新构建docker容器。我读了很多问题,答案归结为a。共享卷(我已经完成)b。在nginx中设置serve file off(它是):

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)$ {}
    }
}

我遗漏了什么?

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

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

在本地开发中可以考虑命名卷。但在生产环境中,尤其是使用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

可以在本地开发中考虑命名卷。但在生产环境中,尤其是使用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

只是建立在开发的基础上,所以还没有做Swarm。虽然,我可能会用它。奇怪的是,这在v3中似乎不起作用。我将在开发人员中尝试这种方法,然后在生产中找出其他方法。在v3中不起作用,因为来自
键的
卷\u已被弃用。在v3/Swarm环境中执行此操作的正确方法是使用命名卷。希望一切顺利!是的,好的。我一直在玩这个。只是想确保我走上了正确的道路-谢谢!只是建立在开发的基础上,所以还没有做Swarm。虽然,我可能会用它。奇怪的是,这在v3中似乎不起作用。我将在开发人员中尝试这种方法,然后在生产中找出其他方法。在v3中不起作用,因为来自
键的
卷\u已被弃用。在v3/Swarm环境中执行此操作的正确方法是使用命名卷。希望一切顺利!是的,好的。我一直在玩这个。只是想确保我走上了正确的道路-谢谢!