#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, вы можете легко изменить его в правом нижнем углу.