node_modules недоступны в изображении при работе в OpenShift - PullRequest
1 голос
/ 30 мая 2020

У меня есть файл 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
...