Вы не должны использовать ng serve
в рабочем контейнере Docker, потому что он вызывает HTTP-сервер разработки, совсем не безопасный, просто предназначенный для локального тестирования приложения.Вот почему команда ng serve --prod
выдает следующее предупреждение:
****************************************************************************************
This is a simple server for use in testing or debugging Angular applications locally. It hasn't been reviewed for security issues.
DON'T USE IT FOR PRODUCTION!
****************************************************************************************
Я приведу пример Dockerfile, оборачивающего приложение Angular с HTTP-сервером Nginx (одним из двух наиболее широко используемых серверов).:
FROM node:10.13.0-stretch as build-stage
WORKDIR /app
COPY package*.json /app/
RUN npm install
RUN npm install -g --unsafe-perm @angular/cli@latest
COPY ./ /app/
ARG configuration=production
RUN ng build --prod --build-optimizer=true --aot=true --output-hashing=all --extract-css=true --named-chunks=false --vendor-chunk=true
FROM nginx:1.14.1
# Add application files
COPY --from=build-stage /app/dist/name-of-your-app/ /var/www/html
COPY --from=build-stage /app/nginx/nginx.conf /etc/nginx/nginx.conf
COPY --from=build-stage /app/nginx/site.conf /etc/nginx/conf.d/default.conf
RUN touch /var/run/nginx.pid && \
chown -R www-data: /etc/nginx/ && \
chown -R www-data: /var/run/nginx.pid && \
chown -R www-data: /var/cache/nginx && \
chown -R www-data: /var/www/html
USER www-data
#Expose the port
EXPOSE 8080
STOPSIGNAL SIGTERM
CMD ["nginx", "-g", "daemon off;"]
При этом создаются два контейнера: первый устанавливает CLI и создает приложение, второй копирует файлы из «контейнера сборки» в его папку, обслуживаемую HTTP-сервером Nginx, затем первыйКонтейнер уничтожается.
Это предполагает, что у вас есть правильные nginx.conf
и site.conf
в папке nginx
, в которой хранится ваша конфигурация сертификата (и, между прочим, вы должны добавить сертификат и файлы закрытого ключа вDockerfile тоже).Вы также можете использовать Apache в качестве HTTP-сервера.