Я использую эту Dockerfile конфигурацию
FROM openjdk:17-alpine
ARG APP_HOME=/app
WORKDIR $APP_HOME
COPY ./target/ws-exec.jar ws.jar
ENV JAVA_OPTS = "-Dspring.profiles.active=prod -Dspring.application.name=words"
ENTRYPOINT java $JAVA_OPTS -jar ./ws.jar $JAVA_ARGS
После деплоя на миникубе вижу единственный лог:
Error: Unable to access jarfile /ws.jar.
Я попытался запустить docker run -it <image> с именем моего образа, и он успешно запустился с докером. Запуск docker exec -it <container> показывает мне, что jar находится в нужной папке. Я попытался сделать исполняемый файл jar, добавив слой CMD или RUN в свой Dockerfile, но ничего не помогло.
Где моя ошибка, или что я не понимаю?
UPD вот мой деплоймент.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: revise-words-ws
name: revise-words-ws
namespace: default
spec:
replicas: 1
minReadySeconds: 45
selector:
matchLabels:
app: revise-words-ws
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
app: revise-words-ws
spec:
containers:
- image: maxrybalkin91/revise-words-ws:1.0
imagePullPolicy: IfNotPresent
name: revise-words-ws
env:
- name: VAULT_TOKEN
valueFrom:
secretKeyRef:
name: words
key: vault_token
- name: VAULT_HOST
valueFrom:
secretKeyRef:
name: words
key: vault_host
- name: VAULT_PORT
valueFrom:
secretKeyRef:
name: words
key: vault_port
ports:
- name: liveness-port
containerPort: 8089
resources:
requests:
cpu: 100m
memory: 256Mi
limits:
cpu: 300m
memory: 512Mi
readinessProbe:
httpGet:
path: /
port: liveness-port
failureThreshold: 5
periodSeconds: 10
initialDelaySeconds: 60
livenessProbe:
httpGet:
path: /
port: liveness-port
failureThreshold: 5
periodSeconds: 10
initialDelaySeconds: 60
terminationGracePeriodSeconds: 30
restartPolicy: Always
@DavidMaze Только что добавил мою конфигурацию развертывания. У меня была опечатка, я не использовал bash, но использовал docker run maxrybalkin91/revise-words-ws:1.0 и увидел логи приложения в консоли, значит, jar был найден на изображении и выполнен
Я только что попробовал docker run maxrybalkin91/revise-words-ws:1.0, и кажется, что приложение запускается, но жалуется на отсутствие конфигурации. Не пробовал среду, которую вы указали. Но: в заголовке вопроса указано, что банка не найдена - и это неправда. Что мы здесь ищем?
@Queeg не находит конфигурацию, потому что она взята из хранилища, которое запускается в моем миникубе.
@Queeg Мы ищем причину, по которой образ запускается в докере, даже с ошибкой; но не запускается в Kubernetes




В качестве ENTRYPOINT вы указываете Java для запуска ./ws.jar, предполагая, что он будет разрешен из рабочего каталога /app.
Во время выполнения вы получаете сообщение об ошибке, что /ws.jar недоступен, что выглядит как абсолютный путь.
При запуске вашего контейнера с помощью /bin/bash проверьте, где находится ваш файл jar и какой у него режим. Затем решите, кто прав, а кто виноват: ваш файл докера или ваше сообщение об ошибке. Почини сломанный.
Я добавил RUN ls ../app/ в свой Dockerfile, и вот журнал сборки ---> Running in fc6abc20b853 ws.jar
Если, как вы говорите, файл jar находится в правильном месте (и я предполагаю, что это /app), как насчет использования абсолютного пути для выполнения?
ENTRYPOINT java $JAVA_OPTS -jar $APP_HOME/ws.jar $JAVA_ARGS
Я пробовал это. Не помогло. Интересно, что запуск образа докера с помощью docker run находит банку и запускает приложение.
Только что попробовал это ENTRYPOINT java $JAVA_OPTS -jar ../app/ws.jar $JAVA_ARGS, и это не помогло
Сделать docker run ... успешным — вот в чем суть. Если вы достигли этого, что еще вам нужно?
В kubernetes не работает, мой pod вылетает с основной ошибкой
Так в чем же «основная ошибка»? Может быть, добавить это к вашему вопросу. То, что я понял, не связано с пропавшими баночками.
Как кажется, docker run maxrybalkin91/revise-words-ws:1.0 вызывает приложение, которое жалуется на отсутствие данных конфигурации, но нигде не найден файл jar.
Так как в миникубе вы видите совсем другую ошибку, возможно вы используете какой-то устаревший образ?
Попробуйте изменить imagePullPolilcy=Always и посмотрите, что получится.
https://kubernetes.io/docs/concepts/containers/images/
Это помогло! Большое спасибо! Похоже, он не использовал новый образ, даже он был перестроен и отправлен на мой хаб!
Можете ли вы
docker runсвой образ нормально? (Поскольку он построен, я был бы удивлен, если быdocker run ... bashпредоставил вам интерактивную оболочку.) Если проблема конкретно в Minikube, можете ли вы отредактировать вопрос, включив в него YAML-файл развертывания Kubernetes?