не могу открыть файл приложения. Кубернетес и Docker - PullRequest
0 голосов
/ 22 января 2020

Я получаю сообщение об ошибке: python: невозможно открыть файл 'app.py': [Errno 2] Нет такого файла или каталога , когда я пытаюсь создать развертывание. Я включил структуру папок, развертывание и манифесты PV C.

Когда я создаю контейнер из образа docker, который я создал с использованием файла docker ниже, он работает нормально - СОСТОЯНИЕ: Выполняется .

Я подозреваю, что это может быть связано с постоянными томами или с тем, как я записал свои пути. Я пробовал использовать длинную форму (/ var / www/code/order_service/app..) для своих путей, но столкнулся с той же проблемой.

Буду признателен за любую помощь. Заранее спасибо, ребята.

Docker Файл

FROM python:3-alpine3.10


COPY ./app/requirements.txt /app/requirements.txt

WORKDIR /app

RUN apk add --update \
     bash \
     curl \
     py-mysqldb \
     gcc \
     libc-dev \
     mariadb-dev \
     nodejs \
     npm \
  && pip install --upgrade pip  \
  && pip install -r requirements.txt \
  && rm -rf /var/cache/apk/*

COPY ./app/package.json /app/package.json
RUN npm install

COPY ./app /app

CMD ["python", "app.py"]

Структура папок

code
  order_service
    app
     app.py

Вот мой манифест:

DEPLOYMENT

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    io.kompose.service: order
  name: order
spec:
  replicas: 1
  selector:
    matchLabels:
      io.kompose.service: order
  strategy:
    type: Recreate
  template:
    metadata:
      creationTimestamp: null
      labels:
        io.kompose.service: order
    spec:
      containers:
      - image: order:1.0
        imagePullPolicy: IfNotPresent
        name: order
        ports:
        - containerPort: 5000
        resources: {}
        volumeMounts:
        - mountPath: ./app
          name: order-claim0
      restartPolicy: Always
      volumes:
      - name: order-claim0
        persistentVolumeClaim:
          claimName: order-claim0
status: {}


PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  creationTimestamp: null
  labels:
    io.kompose.service: order-claim0
  name: order-claim0
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 100Mi
status: {}

1 Ответ

2 голосов
/ 22 января 2020

Я не понял суть.

В Dockerfile вы помещаете app.py в docker папку изображения /app

WORKDIR /app

COPY ./app /app

CMD ["python", "app.py"]

Затем в Kubernetes вы пытаетесь заменить папку /app на постоянную объем.

Но откуда взялся первый?

        volumeMounts:
        - mountPath: ./app
          name: order-claim0

Так вот почему, когда вы запускаете локально с этим docker образом, это нормально, но когда вы запускаете подобную команду как показано ниже, произойдет сбой.

docker run -ti --rm -v $(New_Local_folder_somewhere):/app order:1.0

Поскольку папка /app была заменена полностью новой подключенной папкой.

Во-вторых, не могли бы вы в этом случае использовать абсолютный путь больше, чем относительный путь?

        - mountPath: ./app

change to 

        - mountPath: /app
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...