簡體   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