【发布时间】:2021-08-20 10:23:22
【问题描述】:
是否可以为特定的 docker 层安装附加功能?在实践中,我想为 asp.net 核心应用程序启动的脚本添加从终端处理 ssh 的能力。在普通的非 docker 环境中,这可以正常工作。
MyDockerFile:
FROM mcr.microsoft.com/dotnet/aspnet:3.1 AS base
WORKDIR /app
FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build
WORKDIR /src
COPY ["LinuxConsoleApp/LinuxConsoleApp.csproj", "LinuxConsoleApp/"]
COPY . ./
WORKDIR "/src/LinuxConsoleApp"
RUN dotnet build "LinuxConsoleApp.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "LinuxConsoleApp.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
##instaling additional service, in my case ssh-client
RUN apt-get update && apt-get install -y openssh-client
##changing permissions
RUN mkdir -p /root/.ssh && \
chmod 0700 /root/.ssh
###unsafe coping private key to container - i know
COPY id_rsa /root/.ssh/id_rsa
WORKDIR /app/
###here ssh can connect from docker to localhost during build time
RUN ssh -o StrictHostKeyChecking=no troom@192.168.0.200
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "LinuxConsoleApp.dll"]
COPY LinuxConsoleApp/data /app/scripts
当我尝试从 asp.net 核心容器运行脚本时,我收到消息:
/app/scripts/Import.sh: 1: /app/scripts/Import.sh: ssh: not found
Import.sh 是我的脚本,其中包含:
ssh -o StrictHostKeyChecking=no troom@192.168.0.200
如您所见,它安装了 ssh 客户端,但我不明白为什么它在 asp.net 核心应用程序中不可用
【问题讨论】:
-
它可能只是在构建期间正确设置但在运行时没有正确设置的 PATH 环境变量。你能把脚本改成
/usr/bin/ssh,而不仅仅是ssh吗? -
@HansKilian 我试过了,不幸的是它没有帮助。目前我收到“/usr/bin/ssh: not found”错误。
-
如何运行脚本?从代码?看起来怎么样?
-
我使用 Process start from code。这是代码pastebin.com/Apik56d7
-
@HansKilian 感谢您的帮助。根据我给自己的答案解决了问题。
标签: linux docker ssh dockerfile