Каков наилучший подход к выполнению сценария bash внутри контейнера Docker?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Каков наилучший подход к выполнению сценария bash внутри контейнера Docker?

Сообщение Anonymous »

Моя проблема в том...
У меня есть Flask API внутри Docker-контейнера, цель этого проекта — отказаться от школьной системы и получить все расписания занятий в для того, чтобы сгенерировать все возможные комбинации расписаний для студента. Все работает нормально. Однако у меня есть конечная точка, которая служит для удаления веб-страницы моих школ (Мне приходится делать это вручную, и это НЕОБХОДИМО для запуска других функций, использующих эту информацию).
Мои вопросы:
Я создал сценарий bash, который отправляет запрос GET в ту конечную точку, о которой я упоминал ранее:

Код: Выделить всё

#!/bin/bash

URL="http://localhost:5555/FetchGroupDataUPSite"
max_retries=3
retries=0
delay=5

echo "Sending GET request to scrapper endpoint..."

while [ $retries -lt $max_retries ]
do
response=$(curl -s -o /dev/null -w "%{http_code}" -X GET $URL)
if [ $response -eq 200 ]
then
echo "Scrapper script completed."
break
else
echo "Request failed with status code $response. Retrying in $delay seconds..."
retries=$((retries+1))
sleep $delay
fi
done

if [ $retries -eq $max_retries ]
then
echo "Maximum number of retries reached. Scrapper script failed."
fi

Можно ли запускать этот bash-скрипт каждый раз, когда я создаю Docker-контейнер после запуска всех служб?
Я также готов услышать предложения по различным подходам к решению этой проблемы (мой подход может быть совершенно неверным)
Вот мои файлы docker-compose и Dockerfile на случай, если это необходимо:
docker-compose.yml:

Код: Выделить всё

version: '3.8'
networks:
app-tier:
driver: bridge
services:
db:
image: mysql:5.7
container_name: UP_DB
restart: always
environment:
MYSQL_ROOT_PASSWORD: ***
MYSQL_PASSWORD: ***
MYSQL_DATABASE: ***
MYSQL_USER: ***
command: --default-authentication-plugin=mysql_native_password --bind-address=0.0.0.0 --explicit_defaults_for_timestamp
volumes:
- ./sql:/docker-entrypoint-initdb.d
ports:
- 3306:3306
networks:
- app-tier
adminer:
image: adminer
container_name: UP_Adminer
restart: always
ports:
- 8080:8080
networks:
- app-tier
api:
container_name: UP_API
stdin_open: true
tty: true
restart: always
build: .
ports:
- 5555:5555
volumes:
- ./App:/SmartUP/App
networks:
- app-tier

Dockerfile

Код: Выделить всё

FROM python:3.10.7-buster
WORKDIR /SmartUP
COPY . .
ENV FLASK_ENV development
ENV DEBUG true
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt-get install -y wget
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
RUN sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list'
RUN apt-get -y update
RUN apt-get install -y google-chrome-stable
RUN apt-get install -yqq unzip
RUN wget -O /tmp/chromedriver.zip http://chromedriver.storage.googleapis.com/`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE`/chromedriver_linux64.zip
# Unzip the Chrome Driver into /usr/local/bin directory
RUN unzip /tmp/chromedriver.zip chromedriver -d /usr/local/bin/
# Set display port as an environment variable
ENV DISPLAY=:99

RUN pip install --upgrade pip && pip3 install -r requirements.txt
CMD ["python", "App/run.py"]

# Makes the file executable
EXPOSE 5555

Заранее спасибо, что нашли время ответить на мой вопрос 😁.

Подробнее здесь: https://stackoverflow.com/questions/760 ... -container
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»