У меня есть файл Dockerfile для проекта NodeJS, где я делаю npm i
вместо package.json
. docker build
проходит нормально. Я могу подтвердить, что папка node_modules
действительно доступна в нужном месте, когда я проверяю изображение с помощью dive
. Кроме того, я могу успешно запустить изображение локально с помощью docker run -it imageName -p 1880:1880
.
Однако это изображение не запускается в OpenShift, поскольку файл js
, требуемый npm start
, недоступен, потому что node_modules
отсутствует. Я добавил команду в Deployment
YAML для sleep infinity
, чтобы самому заглянуть в файловую систему. Действительно, папка node_modules
отсутствует. Кроме того, если я сделал npm i
в контейнере , установка будет выполнена, как и npm start
.
Я не понимаю, почему node_modules
не отображается при запуске изображение в OpenShift!
Dockerfile
FROM node:12-alpine
# Copy scripts see - https://github.com/node-red/node-red-docker/tree/master/docker-custom/scripts
COPY scripts/*.sh /tmp/
# Install tools, create Node-RED app, add user and set rights
RUN set -ex && \
apk add --no-cache \
bash \
tzdata \
iputils \
curl \
nano \
git \
openssl \
openssh-client && \
mkdir -p /usr/src/node-red && \
deluser --remove-home node && \
adduser -h /usr/src/node-red -D -H node-red -u 1000 && \
chown -R node-red:root /usr/src/node-red && chmod -R g+rwX /usr/src/node-red
# Install Build tools
RUN apk add --no-cache --virtual buildtools build-base linux-headers udev python && \
/tmp/remove_native_gpio.sh && \
/tmp/install_devtools.sh && \
rm -r /tmp/*
WORKDIR /usr/src/node-red
# package.json - https://github.com/node-red/node-red-docker/blob/master/docker-custom/package.json
COPY package.json .
COPY flows.json .
COPY flows_cred.json .
# https://nodered.org/docs/user-guide/runtime/settings-file
COPY settings.js .
RUN chown -R node-red:root /usr/src/node-red
USER node-red
RUN npm install
EXPOSE 1880
ENTRYPOINT ["npm", "start", "--userDir", "/usr/src/node-red", "--settings", "/usr/src/node-red/settings.js"]
Развертывание YAML
apiVersion: apps/v1
kind: Deployment
metadata:
name: node-red-ui
spec:
selector:
matchLabels:
app: node-red-ui
template:
metadata:
labels:
app: node-red-ui
spec:
containers:
- name: node-red-ui
image: repo/imageName:tag
env:
- name: NODE_RED_VERSION
value: 1.0.3
- name: NODE_PATH
value: /usr/src/node-red/node_modules
- name: HOME
value: /usr/src/node-red
- name: FLOWS
value: flows.json
resources:
limits:
memory: "512Mi"
cpu: "500m"
ports:
- containerPort: 1880
name: ui-port
imagePullPolicy: Always