Node.js docker容器中的NodeJS网页包构建
我读过这篇文章,并试图在我的项目中实现它,但当我试图在docker容器中构建它时,清单文件生成了指向资产的错误链接,但生成过程运行良好 Dockerfile.webNode.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
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构建脚本中发现了问题。我会在下面的评论中写下答案