【问题标题】:NodeJS webpack building in docker container在 docker 容器中构建 NodeJS webpack
【发布时间】:2018-01-21 06:53:22
【问题描述】:

我阅读了有关 long-term caching 的文章并尝试在我的项目中实现这一点,但是当我尝试在 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 构建脚本中发现了问题。我会在下面的评论上写答案

标签: node.js caching docker webpack yarnpkg


【解决方案1】:

我发现这个问题是由我使用 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:

那里我使用了共享卷assets,再次启动docker-compose时没有清除它。

我已经使用这个命令构建:
rm -rf tmp &amp;&amp; mkdir -p tmp &amp;&amp; tar -czvf tmp/app.tar.gz src config .babelrc mq.json postcss.config.js webpack.*.js package.json yarn.lock &amp;&amp; export $(cat ./docker/web.env | grep -v ^# | xargs) &amp;&amp; docker-compose -p cruiserwars build,
我在那里准备了带有源代码的 tar.gz,设置了环境变量,然后使用docker-compose.yml 来构建我的项目。但是我忘了删除之前创建的卷......

所以解决方案是使用以下命令:
rm -rf tmp &amp;&amp; mkdir -p tmp &amp;&amp; tar -czvf tmp/app.tar.gz src config .babelrc mq.json postcss.config.js webpack.*.js package.json yarn.lock &amp;&amp; export $(cat ./docker/web.env | grep -v ^# | xargs) &amp;&amp; docker-compose down -v &amp;&amp; docker-compose -p cruiserwars build,

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

【讨论】:

    猜你喜欢
    • 2018-01-10
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    • 2023-02-08
    • 2021-11-02
    • 2020-05-23
    相关资源
    最近更新 更多