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

标签 windows docker dockerfile line-endings dos2unix

我在 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 上运行“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?

最佳答案

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

如果您使用的是 vscode,您可以在右下角轻松更改它。

关于windows - 在 Windows 上运行 Docker 脚本时如何替换 "\r"行结尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64083660/

相关文章:

c++ - 键盘布局更改时如何收到通知?

C++ Windows Sleep() 不停止其他任务

android - 通过 WiFi 将图像从 Android 发送/保存到 Windows 时数据过多

docker - 如何查看 Docker 引擎的内存分配?

docker - 为什么Docker COPY在单个文件和目录下的工作方式有所不同?

docker - 为什么 docker 需要构建所有前面的阶段?

docker - 如何在dockerfile中指定C驱动器(Windows Image)

c++ - 在使用 NT DDK 构建的用户模式程序中包含 C++ header

docker - 创建 dockerfile 时遵循符号链接(symbolic link)

Docker 构建 - mmap() 失败 : [12] Cannot allocate memory (Using Apple M1 chip)