Bash Docker:shell文件;“不存在”;明目张胆

Bash Docker:shell文件;“不存在”;明目张胆,bash,docker,docker-compose,Bash,Docker,Docker Compose,我正在尝试设置一个Docker容器,以运行shell脚本作为其入口点 以下是我的(简单)Dockerfile: FROM mcr.microsoft.com/dotnet/core/sdk:3.1.102 as base WORKDIR /tests COPY . . RUN dotnet build -c Release ARG CHECKSERVICES ENV CHECKSERVICES ${CHECKSERVICES} RUN chmod +x ./entrypoint.sh

我正在尝试设置一个Docker容器,以运行shell脚本作为其入口点

以下是我的(简单)Dockerfile:

FROM mcr.microsoft.com/dotnet/core/sdk:3.1.102 as base
WORKDIR /tests

COPY . .

RUN dotnet build -c Release

ARG CHECKSERVICES
ENV CHECKSERVICES ${CHECKSERVICES}

RUN chmod +x ./entrypoint.sh

ENTRYPOINT ["sh", "-c", "./entrypoint.sh"]
但如果运行此容器,则会得到以下输出:

endtoendtests_1  | sh: 1: ./entrypoint.sh: not found
真奇怪,我想。我很确定我的路线是正确的。果不其然,如果我将Dockerfile中的
entrypoint
声明更改为
ls
,我将得到以下输出:

endtoendtests_1  | Backdoor
endtoendtests_1  | Context
endtoendtests_1  | Dockerfile
endtoendtests_1  | Dtos
endtoendtests_1  | Features
endtoendtests_1  | Hooks.cs
endtoendtests_1  | Http.EndToEndTests.csproj
endtoendtests_1  | Ioc.cs
endtoendtests_1  | Izberg
endtoendtests_1  | IzbergStubAddressIds.cs
endtoendtests_1  | IzbergStubShippingOptionsIds.cs
endtoendtests_1  | IzbergStubUserIds.cs
endtoendtests_1  | Repository
endtoendtests_1  | Steps
endtoendtests_1  | Utils
endtoendtests_1  | appsettings.json
endtoendtests_1  | bin
endtoendtests_1  | entrypoint.sh  <--------------- There you are!
endtoendtests_1  | obj
endtoendtests_1 |后门
endtoendtests|u 1 |上下文
endtoendtests|u 1 | Dockerfile
endtoendtests|u 1 | Dtos
endtoendtests|u 1|特征
endtoendtests_1 | Hooks.cs
endtoendtests_1| Http.endtoendtests.csproj
endtoendtests|u 1|Ioc.cs
伊兹伯格
endtoendtests|u 1 | IzbergStubAddressIds.cs
endtoendtests|u 1 | IzbergStubShippingOptionsIds.cs
endtoendtests|u 1 | IzbergStubUserIds.cs
endtoendtests|u 1 |存储库
endtoendtests|u 1 |步骤
endtoendtests|u 1|Utils
endtoendtests_1 | appsettings.json
endtoendtests|u 1|bin

endtoendtests_1 | entrypoint.sh
/entrypoint.sh:找不到
可能是因为第1行的解释器找不到

例如,如果在unix环境中运行时脚本中有Windows行结尾,则可能发生这种情况


尝试:
dos2unix entrypoint.sh

您的
ls
测试看起来像:
entrypoint[“sh”、“-c”、“ls”]
脚本的第一行是什么;图像中是否存在解释器?您是否在
docker compose.yml
文件中的
/tests
目录上装载了一些内容?如果您在Windows主机上,是否仔细检查了脚本的行尾?好的,请尝试使测试尽可能与实际测试相似。此外,
sh
可能被解释为旧伯恩壳牌公司。如果脚本中有
bash
-code,则可能会因
未找到而失败。在这种情况下:
ENTRYPOINT[“bash”、“-c”、“/ENTRYPOINT.sh”]
看起来文件中有Windows行结尾。是
entrypoint.sh中的第一行/bin/sh
dos2unix entrypoint.sh
可能会有所帮助;我将更改行尾并重试