Docker容器中与主机同步的时间

我正在尝试CosmosDB通过我的SpringBoot应用进行连接。如果我通过Spring或通过运行应用程序,则所有这些工作都可以进行Intellij。但是,当我在其中运行应用程序时,Docker出现以下错误消息:

com.azure.data.cosmos.CosmosClientException: The authorization token is not valid at the current time.

Please create another token and retry

(token start time: Thu, 26 Mar 2020 04:32:10 GMT,

token expiry time: Thu, 26 Mar 2020 04:47:10 GMT, current server time: Tue, 31 Mar 2020 20:12:42 GMT).

请注意,在以上错误消息current server time中正确,但其他时间晚了5天。

我发现有趣的是,我只在docker容器中收到过此消息。

FROM {copy of zulu-jdk11}

ARG JAR_FILE

#.crt file in the same folder as your Dockerfile

ARG CERT="cosmos.cer"

ARG ALIAS="cosmos2"

#import cert into java

COPY $CERT /

RUN chmod +x /$CERT

WORKDIR $JAVA_HOME/lib/security

RUN keytool -importcert -file /$CERT -alias $ALIAS -cacerts -storepass changeit -noprompt

WORKDIR /

COPY /target/${JAR_FILE} app.jar

COPY run-java.sh /

RUN chmod +x /run-java.sh

ENV JAVA_OPTIONS "-Duser.timezone=UTC"

ENV JAVA_APP_JAR "/app.jar"

# run as non-root to mitigate some security risks

RUN addgroup -S pcc && adduser -S nonroot -G nonroot

USER nonroot:nonroot

ENTRYPOINT ["/run-java.sh"]

需要注意的一件事是,ENV JAVA_OPTIONS "-Duser.timezone=UTC"但是删除它根本没有帮助我

我基本上从IntelliJ运行相同的步骤,但没有问题,但是在docker中,到期日期似乎要晚5天。

version: "3.7"

services:

orchestration-agent:

image: {image-name}

ports:

- "8080:8080"

network_mode: host

environment:

- COSMOSDB_URI=https://host.docker.internal:8081/

- COSMOSDB_KEY={key}

- COSMOSDB_DATABASE={database}

- COSMOSDB_POPULATEQUERYMETRICS=true

- COSMOSDB_ITEMLEVELTTL=60

我想这也应该提到的是我改变了network_modehost。而且我还将CosmosDB

URI从更改https://localhost:8081https://host.docker.internal:8081/

我还要提及的是,我dockerfile是借助以下方法构建的:

服务无法识别将自签名证书导入Docker的JRE

cacert

如何在Dockerfile中为LDAPS向Jenkins添加SSL自签名证书?

回答:

Docker容器不维护单独的时钟,它与Linux主机相同,因为时间不是命名空间值。这也是Docker删除更改容器内时间的权限的原因,因为这会影响主机和其他容器,从而破坏隔离模型。

但是,在Docker桌面上,docker在VM内部运行(允许您在非Linux桌面上运行Linux容器),并且在笔记本电脑挂起时,VM的时间可能会不同步。当前正在github上的一个问题中对此进行跟踪,您可以按照该问题查看进度:https : //github.com/docker/for-

win/issues/4526

可能的解决方案包括重新启动计算机,重新启动Docker的VM,将NTP作为特权容器运行或使用以下PowerShell在Windows VM中重置时间同步:

Get-VMIntegrationService -VMName DockerDesktopVM -Name "Time Synchronization" | Disable-VMIntegrationService

Get-VMIntegrationService -VMName DockerDesktopVM -Name "Time Synchronization" | Enable-VMIntegrationService

使用WSL 2,重新启动VM涉及:

wsl --shutdown

wsl

以上是 Docker容器中与主机同步的时间 的全部内容, 来源链接: utcz.com/qa/422233.html

回到顶部