#docker #docker-compose #sh #gunicorn #fastapi
#докер #докер-сочинение #ш #пушечный корн #быстрый переход
Вопрос:
Я собираюсь запустить сценарий оболочки внутри точки входа docker-compose. Но когда я это делаю docker-compose up
, начинается gunicorn, но он не может найти сценарий оболочки. Все отлично работает без скрипта оболочки. Но я просто хочу добавить сценарий оболочки, потому что мне нужно задать некоторые параметры.
Это мой docker-compose.yml
version: "3.7" services: my-container: image: my_image:latest volumes: - ${LOGDIR}:/app/log/ - ${SCRIPTS}:/app/scripts/ ports: - ${PORT}:80 entrypoint: - /bin/sh - /app/scripts/api_reload.sh
Это внутри api_reload.sh
# !/usr/bin/env gunicorn app.inf.api.api_pks:app -b 0.0.0.0:80 -k uvicorn.workers.UvicornWorker --timeout 1000
Это информация об ошибке
Recreating information-extraction1 ... done Attaching to information-extraction_my-container_1 : not found_1 | /app/scripts/api_reload.sh: 3: /app/scripts/api_reload.sh: my-container_1 | [2021-12-10 00:01:20 0000] [8] [INFO] Starting gunicorn 20.0.4 my-container_1 | [2021-12-10 00:01:20 0000] [8] [INFO] Listening at: http://127.0.0.1:8000 (8) my-container_1 | [2021-12-10 00:01:20 0000] [8] [INFO] Using worker: sync my-container_1 | [2021-12-10 00:01:20 0000] [10] [INFO] Booting worker with pid: 10 my-container_1 | 2021-12-10 00:01:21,130 - INFO - api - lt;modulegt;, line 50: PREDICTION HAS BEEN STARTED
Спасибо вам за вашу помощь
Комментарии:
1. Случайно ли в сценарии есть окончания строк DOS?
2. @DavidMaze можете ли вы объяснить подробнее об этом? кстати, я использую Windows. Я должен был убедиться, что в сценарии нет никаких дополнительных символов/пробелов/символов
Ответ №1:
Синтаксис правильный, однако, поскольку каталог смонтирован, вы должны убедиться, что пользователь, запускающий контейнер, может его видеть.
Я привел короткий пример и могу подтвердить, что он работает.
. ├── docker-compose.yml └── scripts └── api_reload.sh
api_reload.sh
Содержание
# !/usr/bin/env echo "entry point!"
docker-compose.yml
файл.
services: my-container: image: ubuntu volumes: - ./scripts/:/app/scripts/ entrypoint: - /bin/sh - /app/scripts/api_reload.sh
Точка входа выполняется при запуске контейнера.
docker-compose up # Starting entrypoint_my-container_1 ... done # Attaching to entrypoint_my-container_1 # my-container_1 | entry point! # entrypoint_my-container_1 exited with code 0