Node.js docker容器中的NodeJS网页包构建

Node.js docker容器中的NodeJS网页包构建,node.js,caching,docker,webpack,yarnpkg,Node.js,Caching,Docker,Webpack,Yarnpkg,我读过这篇文章,并试图在我的项目中实现它,但当我试图在docker容器中构建它时,清单文件生成了指向资产的错误链接,但生成过程运行良好 Dockerfile.web FROM node:8.2.1-alpine WORKDIR /web ADD /tmp/app.tar.gz /web # At the end node_modules will be removed because of bug with npm prune. # In this case we need re-inst

我读过这篇文章,并试图在我的项目中实现它,但当我试图在docker容器中构建它时,清单文件生成了指向资产的错误链接,但生成过程运行良好

Dockerfile.web

FROM node:8.2.1-alpine

WORKDIR /web

ADD /tmp/app.tar.gz /web

# At the end node_modules will be removed because of bug with npm prune.
# In this case we need re-install production-only deps to reduce container weight.
RUN yarn install && \
yarn run build-production && \
rm -rf node_modules && \
yarn install --production && \
rm -rf src

RUN adduser -D mySecretUser
USER mySecretUser
有人知道它可以是什么,为什么在docker容器中构建是不同的吗?


我试图删除所有图像,关闭docker容器缓存,在生成之前删除
dist
目录–不起作用。

我发现问题是由使用docker compose的构建脚本引起的

Docker compose.yml

version: '3'
services:

  # Web-server which is responsible for server-side rendering.
  # It also add additional middleware layers when proxify requests
  # for dependent systems such as API (for example enrich with auth data before sending).
  web:
    build:
      context: .
      dockerfile: ./docker/Dockerfile.web
    ports:
      - "${WEBSERVER_PORT}"
    env_file:
      - ./docker/web.env
    volumes:
      - assets:/web/dist/assets
    command: ["yarn", "run", "_production"]

  # Nginx used as proxy-wrapper which is placed before web-server.
  # It's resposible for static files and proxy to web-server.
  # It also can be used for proxify websocket connection to specific game server.
  nginx:
    build:
      context: .
      dockerfile: ./docker/Dockerfile.nginx
    volumes:
      - assets:/www/assets
    ports:
      - "80:${NGINX_PORT}"
    env_file:
      - ./docker/web.env
      - ./nginx/nginx.env
    depends_on:
      - web
    command: ["/bin/sh", "-c", "envsubst < /etc/nginx/templates/default.template > /etc/nginx/sites-enabled/default && nginx -g 'daemon off;'"]

volumes:
  assets:
版本:“3”
服务:
#负责服务器端渲染的Web服务器。
#它还可以在代理请求时添加额外的中间件层
#对于依赖系统,如API(例如,在发送前使用auth数据进行充实)。
网状物:
建造:
上下文:。
dockerfile:./docker/dockerfile.web
端口:
-“${WEBSERVER\u PORT}”
环境文件:
-//docker/web.env
卷数:
-资产:/web/dist/assets
命令:[“纱线”、“运行”、“生产”]
#Nginx用作代理包装器,放置在web服务器之前。
#它负责静态文件和web服务器的代理。
#它还可以用于代理websocket与特定游戏服务器的连接。
nginx:
建造:
上下文:。
dockerfile:./docker/dockerfile.nginx
卷数:
-资产:/www/assets
端口:
-“80:${NGINX_PORT}”
环境文件:
-//docker/web.env
-./nginx/nginx.env
取决于:
-网
命令:[“/bin/sh”、“-c”、“envsubt/etc/nginx/sites enabled/default&&nginx-g‘daemon off;’”]
卷数:
资产:
在那里,我使用了共享卷
资产
,当再次启动docker compose时,我没有清除它。

我已使用此命令生成:
rm-rf tmp&&mkdir-p tmp&&tar-czvf tmp/app.tar.gz src config.babelrc mq.json postsss.config.js webpack.*.js package.json warn.lock&&export$(cat./docker/web.env|grep-v^#| xargs)和docker compose-p cruiserwars build

在这里,我准备tar.gz和源代码,设置环境变量,然后使用
docker compose.yml
构建我的项目。但我忘了删除以前创建的卷

因此,解决方案是使用此命令:
rm-rf tmp&&mkdir-p tmp&&tar-czvf tmp/app.tar.gz src config.babelrc mq.json postsss.config.js webpack.*.js package.json warn.lock&&export$(cat./docker/web.env^ grep-v^#xargs)和docker compose down-v和docker compose-p cruiserwars build


您可以看到我添加了
docker compose down-v
来停止容器并删除以前创建的卷。

我发现这个问题是由我使用docker compose的构建脚本引起的

Docker compose.yml

version: '3'
services:

  # Web-server which is responsible for server-side rendering.
  # It also add additional middleware layers when proxify requests
  # for dependent systems such as API (for example enrich with auth data before sending).
  web:
    build:
      context: .
      dockerfile: ./docker/Dockerfile.web
    ports:
      - "${WEBSERVER_PORT}"
    env_file:
      - ./docker/web.env
    volumes:
      - assets:/web/dist/assets
    command: ["yarn", "run", "_production"]

  # Nginx used as proxy-wrapper which is placed before web-server.
  # It's resposible for static files and proxy to web-server.
  # It also can be used for proxify websocket connection to specific game server.
  nginx:
    build:
      context: .
      dockerfile: ./docker/Dockerfile.nginx
    volumes:
      - assets:/www/assets
    ports:
      - "80:${NGINX_PORT}"
    env_file:
      - ./docker/web.env
      - ./nginx/nginx.env
    depends_on:
      - web
    command: ["/bin/sh", "-c", "envsubst < /etc/nginx/templates/default.template > /etc/nginx/sites-enabled/default && nginx -g 'daemon off;'"]

volumes:
  assets:
版本:“3”
服务:
#负责服务器端渲染的Web服务器。
#它还可以在代理请求时添加额外的中间件层
#对于依赖系统,如API(例如,在发送前使用auth数据进行充实)。
网状物:
建造:
上下文:。
dockerfile:./docker/dockerfile.web
端口:
-“${WEBSERVER\u PORT}”
环境文件:
-//docker/web.env
卷数:
-资产:/web/dist/assets
命令:[“纱线”、“运行”、“生产”]
#Nginx用作代理包装器,放置在web服务器之前。
#它负责静态文件和web服务器的代理。
#它还可以用于代理websocket与特定游戏服务器的连接。
nginx:
建造:
上下文:。
dockerfile:./docker/dockerfile.nginx
卷数:
-资产:/www/assets
端口:
-“80:${NGINX_PORT}”
环境文件:
-//docker/web.env
-./nginx/nginx.env
取决于:
-网
命令:[“/bin/sh”、“-c”、“envsubt/etc/nginx/sites enabled/default&&nginx-g‘daemon off;’”]
卷数:
资产:
在那里,我使用了共享卷
资产
,当再次启动docker compose时,我没有清除它。

我已使用此命令生成:
rm-rf tmp&&mkdir-p tmp&&tar-czvf tmp/app.tar.gz src config.babelrc mq.json postsss.config.js webpack.*.js package.json warn.lock&&export$(cat./docker/web.env|grep-v^#| xargs)和docker compose-p cruiserwars build

在这里,我准备tar.gz和源代码,设置环境变量,然后使用
docker compose.yml
构建我的项目。但我忘了删除以前创建的卷

因此,解决方案是使用此命令:
rm-rf tmp&&mkdir-p tmp&&tar-czvf tmp/app.tar.gz src config.babelrc mq.json postsss.config.js webpack.*.js package.json warn.lock&&export$(cat./docker/web.env^ grep-v^#xargs)和docker compose down-v和docker compose-p cruiserwars build


您可以看到,我添加了
docker compose down-v
来停止容器并删除以前创建的卷。

关于它们如何显示预期的和生成的卷的更多详细信息,供我们使用!我在docker compose构建脚本中发现了问题。我将在下面的评论中写下答案,再详细介绍一下它们是如何显示预期的和生成的,让我们向Tarun表示感谢!我在docker compose构建脚本中发现了问题。我会在下面的评论中写下答案