【问题标题】:How do I replace "\r" line endings when running Docker script on Windows?在 Windows 上运行 Docker 脚本时如何替换“\r”行尾?
【发布时间】:2020-09-27 00:16:07
【问题描述】:

我在 Windows 10 上使用 Docker 19(使用 Cygwin 运行 Docker)。我有这个 web/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 上运行“docker-compose up”死机。在我上面的文件中,我有

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: 'migrate\r'. Did you mean migrate?
web_1     | Type 'manage.py help' for usage.

如何正确替换我的 shell 脚本中的“\r”行结尾,以便我可以在 Windows(以及理想的所有其他)平台上正确运行我的 Dockerfile?

【问题讨论】:

  • 如果您的 dos2unix 实用程序有问题,最简单的方法是编写一个小脚本(使用 python,因为您已经拥有它)来修复文件。

标签: windows docker dockerfile line-endings dos2unix


【解决方案1】:

我遇到了同样的问题,在一行中输入命令并用 && 分隔它们解决了这个问题。

在你的情况下是:

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

希望它能解决你的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-17
    • 2018-04-15
    • 1970-01-01
    • 2018-04-22
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    相关资源
    最近更新 更多