Bash Docker:shell文件;“不存在”;明目张胆
我正在尝试设置一个Docker容器,以运行shell脚本作为其入口点 以下是我的(简单)Dockerfile: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
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
可能会有所帮助;我将更改行尾并重试