在 Windows 上运行 Docker 脚本时如何替换"r"行尾?



我在Windows 10上使用Docker 19(使用Cygwin运行Docker(。我有这个网络/Dockerfile。。。

FROM python:3.7-slim
RUN apt-get update && apt-get install
RUN apt-get install -y dos2unix
RUN apt-get install -y libmariadb-dev-compat libmariadb-dev
RUN apt-get update 
    && apt-get install -y --no-install-recommends gcc 
    && 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〃;导致运行";码头工人组成";在Windows上死去。在我上面的文件中,我有

RUN dos2unix /app/entrypoint.sh

但我想这并不能起到作用,因为跑步;码头工人组成";中的结果

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〃;shell脚本中的行结尾,以便我可以在Windows(最好是所有其他(平台上正确运行Dockerfile?

我刚刚遇到了同样的问题,发现它是由文件换行类型引起的。在windows上,大多数文件将保存在CRLF中,而不是LF中。将中断类型从CRLF更改为LF将解决此问题。

如果你在vscode上,你可以很容易地在右下角更改它。

我遇到了同样的问题,在一行中键入命令并用&amp;解决了问题。

在您的情况下,它将是:

python manage.py migrate --noinput && python manage.py migrate directory && python manage.py docker_init_db_data &&

希望它能解决你的问题。

最新更新