Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.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
Reactjs Docker compose:react应用程序和nginx之间的共享静态卷_Reactjs_Docker_Nginx_Docker Compose - Fatal编程技术网

Reactjs Docker compose:react应用程序和nginx之间的共享静态卷

Reactjs Docker compose:react应用程序和nginx之间的共享静态卷,reactjs,docker,nginx,docker-compose,Reactjs,Docker,Nginx,Docker Compose,我正在通过nginx和docker提供react应用程序。我的docker compose配置如下所示: version: '3' services: app: image: registry.gitlab.com/example/www:production volumes: - app:/var/www/app nginx: image: nginx:alpine restart: unless-stopped ports:

我正在通过nginx和docker提供react应用程序。我的docker compose配置如下所示:

version: '3'
services:

  app:
    image: registry.gitlab.com/example/www:production
    volumes:
      - app:/var/www/app

  nginx:
    image: nginx:alpine
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    depends_on:
      - app
    volumes:
      - ./conf.d:/etc/nginx/conf.d
      - ./certbot/conf:/etc/letsencrypt
      - ./certbot/www:/var/www/certbot
      - app:/var/www/app
    command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"

  certbot:
    image: certbot/certbot
    restart: unless-stopped
    volumes:
      - ./certbot/renew.sh:/usr/local/bin/renew.sh
      - ./certbot/conf:/etc/letsencrypt
      - ./certbot/www:/var/www/certbot
    entrypoint: /bin/sh /usr/local/bin/renew.sh

volumes:
  app:
FROM node:latest

WORKDIR /app

# build
COPY package*.json ./
COPY src ./src
COPY public ./public
COPY .env* ./

RUN npm install

RUN npm run build

# remove build material
RUN rm -f package.json
RUN rm -f package-lock.json
RUN rm -rf src
RUN rm -rf public
RUN rm -f .env
RUN rm -f .env.local
RUN mv build/* .
RUN rm -rf build

CMD rm -rf /var/www/app/*; cp -r * /var/www/app/
registry.gitlab.com/example/www:production的Dockerfile如下所示:

version: '3'
services:

  app:
    image: registry.gitlab.com/example/www:production
    volumes:
      - app:/var/www/app

  nginx:
    image: nginx:alpine
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    depends_on:
      - app
    volumes:
      - ./conf.d:/etc/nginx/conf.d
      - ./certbot/conf:/etc/letsencrypt
      - ./certbot/www:/var/www/certbot
      - app:/var/www/app
    command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"

  certbot:
    image: certbot/certbot
    restart: unless-stopped
    volumes:
      - ./certbot/renew.sh:/usr/local/bin/renew.sh
      - ./certbot/conf:/etc/letsencrypt
      - ./certbot/www:/var/www/certbot
    entrypoint: /bin/sh /usr/local/bin/renew.sh

volumes:
  app:
FROM node:latest

WORKDIR /app

# build
COPY package*.json ./
COPY src ./src
COPY public ./public
COPY .env* ./

RUN npm install

RUN npm run build

# remove build material
RUN rm -f package.json
RUN rm -f package-lock.json
RUN rm -rf src
RUN rm -rf public
RUN rm -f .env
RUN rm -f .env.local
RUN mv build/* .
RUN rm -rf build

CMD rm -rf /var/www/app/*; cp -r * /var/www/app/
我不想让我的容器运行任何deamon或代理来“服务”我的react应用程序,而不是随处可见的内容。它的唯一目的是构建和清理应用程序

如您所见,我正在尝试在这个容器和我的nginx实例之间共享一个卷。它正在工作,但在图像更新时不会更新。我猜当我的图像运行时,它会与本地卷同步,并被我的应用程序的旧版本覆盖

我试图在映像中添加一个CMD,以便在“运行时”将所有文件复制到已装入的卷中,但没有任何区别

实现这一目标的最佳选择是什么

我不希望在我的图像中再次使用nginx,因为它会增加复杂性,从而提高计算能力

谢谢你的帮助:)