Докер-составитель не может найти файл .sh

#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