繁体   English   中英

如何给docker容器添加服务?

[英]How to add service to docker container?

是否可以将附加功能安装到特定的 docker 层? 实际上,我想为 asp.net 核心应用程序启动的脚本添加从终端处理 ssh 的能力。 在正常的非 docker 环境中,这工作正常。

我的Docker文件:

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 核心应用程序中获得

问题的解决方案并不明显,至少对我而言。

长话短说:UTF-8 BOM https://www.w3.org/International/questions/qa-byte-order-mark

短篇小说:我的 ssh 文件的格式包含不可见字符。 所以创建一个新文件就足够了,将内容复制到那里(在我的例子中是 ssh -o StrictHostKeyChecking=no troom@192.168.0.200),一切都开始正常工作。

综上所述,上面的dockerfile是正确的,可以放心使用。 问题是脚本文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM