我的问题是。..
我在Docker容器中有一个Flask API,这个项目的目的是废除我的学校系统,并获得所有的课程表,以便为学生生成所有可能的时间表组合。一切都很好。然而,我有一个端点,用于报废我的学校的网页的目的(我必须手动做,它的重要,以运行其他功能,消费该信息)。
我的问题是:
我创建了一个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
在所有服务启动后,我每次构建docker容器时,是否可以运行bash脚本?
我也愿意听取不同方法的建议来解决这个问题(我的方法可能完全错误)
以下是我的docker-compose和Dockerfile文件,以备不时之需:
**docker-compose。联系我们
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
提前感谢您抽出时间回答我的问题😁。
1条答案
按热度按时间bihw5rsg1#
只需根据需要运行脚本即可。您不需要为它执行任何特定于Docker的操作。如果您在与容器相同的主机上运行它,那么当它
curl http://localhost:5555/...
时,它将通过其发布的ports:
到达容器。如果您希望每次重启容器堆栈时都触发此操作,则可以将其打包到脚本中
脚本已包含重试循环。即使在容器堆栈完全正常运行之前运行脚本,您也会进入重试循环,并且在启动过程中可能第二次或第三次运行。(您可能需要等待超过15秒的时间才能使数据库容器完全可用。)