gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 18:50:43 25 4
gpt4 key购买 nike

我正在尝试连接到 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:8081 更改为至 https://host.docker.internal:8081/
我还想提一下,我构建了我的 dockerfile在...的帮助下:

Importing self-signed cert into Docker's JRE cacert is not recognized by the service

How to add a SSL self-signed cert to Jenkins for LDAPS within Dockerfile?

最佳答案

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

但是,在 Docker Desktop 上,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 - Docker 容器中的时间与主机不同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60959274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com