如何在Azure容器实例中进行时间同步



我有一个长期运行的容器部署到Azure容器实例中,容器中的时间必须准确。当容器运行24小时时,时间漂移可能长达7秒,这导致我的应用程序在内部运行时出现问题。

我用来构建应用程序的docker容器是微软的标准.NET6容器定义。保持容器与实时同步的最佳方法是什么?我必须以某种方式在我的容器中安装NTP吗?如有任何帮助,我们将不胜感激:(

这是我的Dockerfile:

RUN apt-get update && apt-get install -y libgdiplus
WORKDIR /app
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["TradingBot.csproj", ""]
RUN dotnet restore "./TradingBot.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "TradingBot.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "TradingBot.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "TradingBot.dll"]```

Docker使用与主机相同的时钟,Docker无法更改它。这意味着在Docker内部执行ntpdate不起作用。

最简单的解决方案似乎是使用-v /etc/localtime:/etc/localtime:ro选项运行容器。因此:

#run without tz info:
docker run --rm -t -i ubuntu date
Wed Apr  2 18:40:07 UTC 2014
# run with tz info:
docker run --rm -t -i -v /etc/localtime:/etc/localtime:ro ubuntu date
Wed Apr  2 11:40:29 PDT 2014.

如果上述解决方案不起作用,建议您参考Thread1Thread2来解决您的问题

最新更新