/ / Budynek sieciowy NodeJS w kontenerze docker - node.js, caching, docker, webpack, yarnpkg

Pakowanie sieci WWW NodeJS w kontenerze dokowanym - node.js, buforowanie, dokowanie, pakiet WWW, yarnpkg

Czytałem o tym długoterminowe buforowanie i próbowałem zaimplementować to w moim projekcie, ale plik manifestu generuje nieprawidłowe linki do zasobów, gdy próbuję go skompilować w kontenerze dokowania, ale proces generowania działa dobrze.

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

Ktoś wie, co to może być, dlaczego budowanie kontenera w doku jest inne?

Próbowałem usunąć wszystkie obrazy, wyłączyć buforowanie kontenera dokera, usunąć dist katalog przed generacją - nie działa.

Odpowiedzi:

0 dla odpowiedzi № 1

Zauważyłem, że problem ten został wprowadzony przez mój skrypt budujący, który używa funkcji dokowania.

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:

Tam użyłem woluminu współdzielonego assets i nie wyczyściłem go, kiedy uruchomiłem dokowanie - ponownie skomponuj.

Używam tego polecenia do zbudowania:
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,
gdzie przygotowuję tar.gz ze źródłami, ustawiam zmienne środowiskowe, a następnie używam docker-compose.yml zbudować mój projekt. Ale zapomniałem usunąć wolumin, który został stworzony wcześniej ...

Więc rozwiązaniem będzie posiadanie tego polecenia zamiast:
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,

możesz to zobaczyć dodałem docker-compose down -v zatrzymać pojemniki i usunąć wolumin, który został utworzony wcześniej.