Ubuntu не может найти файл

Рейтинг: 0Ответов: 1Опубликовано: 25.04.2023

Ubuntu не может найти файл start-users-entrypoint.sh. Он переносится в корневую папку в Dockerfile и запускается в docker-compose. Из-за чего такое может происходить и как это исправить? Заранее спасибо.

Dockerfile

FROM python:3.11-slim-bullseye

ENV DJANGO_ENV=${DJANGO_ENV} \
    # python:
    PYTHONFAULTHANDLER=1 \
    PYTHONUNBUFFERED=1 \
    PYTHONHASHSEED=random \
    PYTHONDONTWRITEBYTECODE=1 \
    # pip:
    PIP_NO_CACHE_DIR=off \
    PIP_DISABLE_PIP_VERSION_CHECK=on \
    PIP_DEFAULT_TIMEOUT=100 \
    # poetry:
    POETRY_VIRTUALENVS_CREATE=false \
    POETRY_CACHE_DIR='/var/cache/pypoetry'

# Copy only requirements, to cache them in docker layer
WORKDIR /app
COPY ./poetry.lock ./pyproject.toml /app/

# System dependencies:
RUN apt-get update && \
    apt-get install --no-install-recommends -y \
    build-essential gettext libpq-dev wget curl \
    # Cleaning cache:
    && apt-get autoremove -y && apt-get clean -y && rm -rf /var/lib/apt/lists/* \
    # Installing 'poetry' package manager:
    && curl -sSL https://install.python-poetry.org | python3 - \
    && export PATH=$HOME/.local/bin \
    && poetry --version \
    && poetry install --no-root --no-interaction

# Project initialization:
# RUN poetry install --no-root

# Creating folders, and files for a project:
COPY . /app/
COPY ./docker/start-users-entrypoint.sh /start-users-entrypoint.sh

# Setting up proper permissions:
RUN chmod +x /start-users-entrypoint.sh \
    && mkdir -p /app/media /app/static \
    && chmod +x /app/media/ /app/static/

WORKDIR ./src

docker-compose.yml

version: '3.9'

services:
  users:
    container_name: users
    build:
      context: ./..
      dockerfile: docker/python.Dockerfile
    environment:
      - DJANGO_SETTINGS_MODULE
    env_file:
      - ../.env.prod
    command: /start-users-entrypoint.sh
    volumes:
      - static:/app/static
      - media:/app/media
    restart: always
    expose:
      - 8000
    ports:
      - '8000:8000' # network_port:docker_host_port
    depends_on:
      - users_db
    networks:
      - users_db

   . . .


volumes:
  media:
  static:
  pgdata:
networks:
  users_db:

start-users-entrypoint.sh

#!/bin/bash

set -euo pipefail

python manage.py collectstatic --no-input
python manage.py makemigrations
python manage.py migrate
if [[ "$DJANGO_ENV" = "prod" ]]; then
  pwd
  gunicorn --bind 0.0.0.0:8000 config.wsgi:application
else
  python manage.py initadmin
  python manage.py runserver 0.0.0.0:8000
fi

Все это чудо заводится командой

docker-compose -f docker/docker-compose.yml --env-file ./.env.prod up -d --build

Ответы

▲ 0

Я нашел ответ здесь!

Нужно, чтобы был установлен тип разрыва строки LF (используется в Unix). Как было у меня (CRLF) на unix и linux выполняться не будет. Рекомендую устанавливать *.sh text eol=lf в файл .gitattributes, чтобы избежать подобного поведения.