2017-08-13 98 views
1

我閱讀了關於long-term caching的這個內容,並試圖在我的項目中實現這一點,但是當我試圖在docker容器中構建它時,清單文件會生成指向資產的錯誤鏈接,但生成過程運行良好。Docker容器中的NodeJS webpack構建

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 

任何人都知道它可以,爲什麼建築搬運工容器有什麼不同?

我試圖刪除所有圖像,關閉碼頭容器緩存,刪除dist目錄之前生成 - 無效。

+0

有關他們如何不同的更多細節顯示預期的一個,並顯示生成的一個讓我們可視化 –

+0

謝謝塔倫!我在docker-compose構建腳本中發現了這個問題。我會在下面的評論中寫回答 –

回答

0

我發現這個問題是由我的使用docker-compose的構建腳本引入的。

多克爾 - 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,我沒有明確它在啓動時再次泊塢窗,作曲。

我一直在使用這個命令來構建:
rm -rf tmp && mkdir -p tmp && tar -czvf tmp/app.tar.gz src config .babelrc mq.json postcss.config.js webpack.*.js package.json yarn.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 postcss.config.js webpack.*.js package.json yarn.lock && export $(cat ./docker/web.env | grep -v ^# | xargs) && docker-compose down -v && docker-compose -p cruiserwars build

你可以看到,我已經加入docker-compose down -v到停止容器並移除之前創建的容量。

相關問題