Как мне заменить окончания строк » r» при запуске скрипта Docker в Windows?

#windows #docker #dockerfile #line-endings #dos2unix

#Windows #docker #dockerfile #окончания строк #dos2unix

Вопрос:

Я использую Docker 19 в Windows 10 (используя Cygwin для запуска Docker). У меня есть этот веб-файл / Dockerfile …

 FROM python:3.7-slim

RUN apt-get update amp;amp; apt-get install

RUN apt-get install -y dos2unix
RUN apt-get install -y libmariadb-dev-compat libmariadb-dev
RUN apt-get update 
    amp;amp; apt-get install -y --no-install-recommends gcc 
    amp;amp; rm -rf /var/lib/apt/lists/*

RUN python -m pip install --upgrade pip

WORKDIR /app/

COPY requirements.txt requirements.txt

COPY entrypoint.sh entrypoint.sh

RUN tr -d 'r' < /app/entrypoint.sh > /app/entrypoint2.sh
RUN python -m pip install -r requirements.txt

RUN grep 'r' /app/entrypoint.sh
RUN dos2unix /app/entrypoint.sh
RUN grep 'r' /app/entrypoint.sh

ENTRYPOINT ["bash", "/app/entrypoint.sh"]

and the entrypoint.sh file referenced looks like

#!/bin/bash
set -e

python manage.py migrate
python manage.py migrate directory
python manage.py docker_init_db_data

exec "$@"
  

Но я предполагаю, что есть некоторые окончания строк » r», из-за которых запуск «docker-compose up» в Windows прекращается. В моем приведенном выше файле у меня есть

 RUN dos2unix /app/entrypoint.sh
  

Но я думаю, это не поможет, потому что запуск «docker-compose up» приводит к

 web_1     | set: usage: set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]
web_1     | /app/entrypoint.sh: line 3: $'r': command not found
web_1     | Unknown command: 'migrater'. Did you mean migrate?
web_1     | Type 'manage.py help' for usage.
  

Как мне правильно заменить окончания строк » r» в моем сценарии оболочки, чтобы я мог правильно запускать свой Dockerfile на платформах Windows (и, в идеале, на всех других)?

Комментарии:

1. Самый простой — написать небольшой скрипт (используйте python, поскольку он у вас уже есть), чтобы исправить файл, если ваша утилита dos2unix глючит.

Ответ №1:

У меня была такая же проблема, и при вводе команд в одну строку и разделении их с помощью amp;amp; проблема была решена.

в вашем случае это было бы:

 python manage.py migrate --noinput amp;amp; python manage.py migrate directory amp;amp; python manage.py docker_init_db_data amp;amp;
  

надеюсь, это решит вашу проблему.

Ответ №2:

Я только что столкнулся с той же проблемой и обнаружил, что она вызвана типом file end of line break . В Windows большая часть файлов будет сохранена в CRLF вместо LF. Изменение типа разрыва с CRLF на LF решило бы проблему.

если вы используете vscode, вы можете легко изменить его в правом нижнем углу.