programing

도커의 시간이 호스트의 시간과 동기화되는지 확인하는 방법은 무엇입니까?

subpage 2023. 8. 27. 09:19
반응형

도커의 시간이 호스트의 시간과 동기화되는지 확인하는 방법은 무엇입니까?

리노드 서버에서 도커를 실행하고 있습니다.때때로, 저는 부두에서 시간이 맞지 않는 것을 봅니다.현재 모든 도커에서 실행 스크립트를 다음 코드 행을 포함하도록 변경했습니다.

yum install -y ntp
service ntpd stop
ntpdate pool.ntp.org

그러나 제가 이상적으로 하고 싶은 것은 도커가 호스트와 시간을 동기화하는 것입니다.이것을 할 수 있는 방법이 있습니까?

이 답변의 출처는 "도커 컨테이너가 호스트 시스템과 자동으로 동기화됩니까?"라는 답변에 대한 설명입니다.

저는 답을 보고 도커 컨테이너에 시계 드리프트가 발생할 리가 없다는 것을 깨달았습니다.도커는 호스트와 동일한 클럭을 사용하며 도커는 클럭을 변경할 수 없습니다.그것은 그것을 하는 것을 의미합니다.ntpdate도커 내부가 작동하지 않습니다.

입니다.ntpdate

한, 시대동에관한한화기간한▁as관한z.-v /etc/localtime:/etc/localtime:ro작동하다.

로컬 파일(/etc/timezone 및 /etc/localtime)을 Docker 컨테이너의 볼륨으로 추가할 수 있습니다.

:docker-compose.yml다음과 같은 행으로

volumes:
    - "/etc/timezone:/etc/timezone:ro"
    - "/etc/localtime:/etc/localtime:ro"

이제 컨테이너 시간이 호스트의 시간과 동일합니다.

이렇게 하면 도커 서버의 시간이 재설정됩니다.

docker run --rm --privileged alpine hwclock -s

다음에 컨테이너를 만들 때 시계가 정확해야 합니다.

출처: https://github.com/docker/for-mac/issues/2076#issuecomment-353749995

boot2docker를 사용하는 경우 ntp가 도커 VM 내에서 작동하지 않지만(ntp 패킷을 전달하지 않는 프록시 뒤에 있음) 호스트가 시간 동기화되어 있으면 호스트에서 다음을 실행할 수 있습니다.

docker-machine ssh default "sudo date -u $(date -u +%m%d%H%M%Y)"

시간할 수 . (UTC 시간대) VM 시간을 설정할 수 .date(UTC 표준 시간대에서 다시).

참고: Windows에서 bash 셸 내부(msysgit에서)는 다음을 사용합니다.

docker-machine.exe ssh default "sudo date -u $(date -u +%m%d%H%M%Y)"

이것이 페도라 20 호스트와 함께 저에게 효과가 있었던 것입니다.다음을 사용하여 컨테이너 실행:

docker run -v /etc/localtime:/etc/localtime:ro -i -t mattdm/fedora /bin/bash

처음에는/etc/localtime에 대한 소프트 링크였습니다./usr/share/zoneinfo/Asia/Kolkata인도 표준시입니다.을 실행하는 중date컨테이너 안은 호스트의 그것과 같은 시간을 보여주었습니다.나는 껍질에서 나와 용기를 멈추었습니다.docker stop <container-id>.

다음으로, 이 파일을 제거하고 링크를 만들었습니다./usr/share/zoneinfo/Singapore되었습니다.호스트 시간이 싱가포르 시간대로 설정되었습니다.그리고 나서 했습니다.docker start <container-id>그런 다음 다음 다음을 사용하여 셸에 다시 액세스합니다.nsenter그리고 시간이 싱가포르 시간대로 설정되어 있다는 것을 발견했습니다.

docker start <container-id>
docker inspect -f {{.State.Pid}} <container-id>
nsenter -m -u -i -n -p -t <PID> /bin/bash

은 그서여중것은요한서를 하는 것입니다.-v /etc/localtime:/etc/localtime:ro컨테이너를 처음 실행할 때 사용합니다.링크에서 찾았습니다.

도움이 되길 바랍니다.

이 쉬운 솔루션은 WSL2의 도커 커널에 대한 시간 동기화 문제를 해결했습니다.

Windows에서 PowerShell을 열고 이 명령을 실행하여 시계를 다시 동기화합니다.

wsl -d docker-desktop -e /sbin/hwclock -s

그런 다음 다음 다음을 사용하여 테스트할 수 있습니다.

docker run -it alpine date

참조: https://github.com/docker/for-win/issues/10347#issuecomment-776580765

작성 파일에 다음 사항이 있습니다.

volumes:
  - "/etc/timezone:/etc/timezone:ro"
  - "/etc/localtime:/etc/localtime:ro"

그러면 replication_log가 올바른 타임스탬프로 설정된 Gerrit docker에서 모두 정상입니다.

도커 시스템을 사용하는 경우 가상 시스템이 표류할 수 있습니다.다시 시작하지 않고 가상 시스템의 시계를 업데이트하려면 다음을 실행합니다.

docker-machine ssh <machine-name|default>
sudo ntpclient -s -h pool.ntp.org

이렇게 하면 NTP를 사용하여 가상 시스템의 시계가 업데이트되고 시작된 모든 컨테이너의 날짜가 정확해집니다.

-1시간 4분의 시간 오프셋에 직면했습니다.

도커를 다시 시작하는 것 자체가 문제를 해결했습니다.

일반적으로 표준 시간대를 설정하려면:

  1. : 컨이너에테: ssh:docker exec -it my_website_name bash

  2. 려달을 dpkg-reconfigure tzdata

  3. 려달을 date

도킹 스테이션 사용:

더하다/etc/localtime:/etc/localtime:ro에▁volumes속성:

version: '3'

services:
  a-service:
      image: service-name
      container_name: container-name
      volumes:
        - /etc/localtime:/etc/localtime:ro

Docker Machine을 사용하는 경우 VirtualBox로 인해 시간에 따라 이동할 수 있습니다. 이 응답에서 알 수 있듯이 https://stackoverflow.com/a/26454059/105562 .

VM을 다시 시작하는 것만으로 쉽고 빠르게 해결할 수 있습니다.

docker-machine restart default

Windows 사용자:

해결책은 매우 간단합니다.파워셸 프롬프트를 열고 다음을 입력하기만 하면 됩니다.

docker run --privileged --rm alpine date -s "$(Get-Date ([datetime]::UtcNow) -UFormat "+%Y-%m-%d %H:%M:%S")"

작동하는지 확인하려면 다음 명령을 실행합니다.

docker run --rm -it alpine date


제 솔루션은 도커 포럼 스레드에서 찾은 무언가에서 영감을 얻었습니다.어쨌든, 이 솔루션은 컴퓨터를 다시 시작하는 것을 제외하고는 도커 데스크톱에서 작동하는 유일한 솔루션이었습니다.원본 스레드에 대한 링크는 다음과 같습니다. https://forums.docker.com/t/syncing-clock-with-host/10432/23

스레드 답변과 내 답변의 차이점은 내 답변이 시간을 UTC 시간으로 변환한다는 것입니다. 예를 들어 AWS에 필요합니다.그렇지 않으면 포럼의 원래 답변은 다음과 같습니다.

docker run --privileged --rm alpine date -s "$(date -u "+%Y-%m-%d %H:%M:%S")"

macOS에서 도커의 경우 도커-time-sync-agent를 사용할 수 있습니다.저한테는 효과가 있어요.

창문을 위한 도커로 저는 체크해야 했습니다.

MobyLinuxVM > Settings > Integration Services > Time synchronization 

Hyper-V 매니저에서 작동했습니다.

이것이 모든 호스트에 대한 일반적인 솔루션은 아니지만 누군가 유용하다고 생각할 수도 있습니다.당신이 어디에 기반을 두고 있는지 알고 있다면 (나를 위한 영국)을 보세요.tianon's여기서 대답하세요.

FROM alpine:3.6
RUN apk add --no-cache tzdata
ENV TZ Europe/London

이것은 제가 도커 파일에 추가한 것이고 시간대 문제는 수정되었습니다.

도커 사용

여기 다단계 빌드에서 바둑 앱의 도커 이미지를 구축하는 완전한 예가 있습니다.이미지에 표준 시간대를 포함하는 방법을 보여줍니다.

FROM golang:latest as builder

WORKDIR /app

ENV GO111MODULE=on \
    CGO_ENABLED=0 \
    GOOS=linux \
    GOARCH=amd64

COPY go.mod .
COPY go.sum .

RUN go mod download

COPY . .

RUN go build -a -installsuffix cgo -ldflags '-extldflags "-static"' -o main

### Certs
FROM alpine:latest as locals

RUN apk --update --no-cache add ca-certificates

RUN apk add --no-cache tzdata

### App
FROM scratch 

WORKDIR /root/

COPY --from=locals /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt

COPY --from=builder app/main .

COPY --from=builder app/templates ./templates

COPY --from=locals /usr/share/zoneinfo /usr/share/zoneinfo

ENV TZ=Asia/Singapore

EXPOSE 8000

CMD ["./main"]

Docker Desktop을 다시 시작하는 것은 도움이 되지 않았습니다.Win10을 종료하고 다시 시작하면 도움이 되었습니다.

저는 이것을 창문에서 보았습니다. 도커 컴포지에서 프로메테우스를 시작했습니다.저는 15시간의 시간 이동이 있었습니다.

WSL에서 Docker Desktop을 실행 중인 경우에는wsl --shutdown파워셸 프롬프트에서.Docker Desktop이 다시 시작되고 Docker 컨테이너를 다시 실행할 수 있습니다.

저를 위해 일했고, 다시 시작할 필요가 없었습니다.

컴퓨터가 절전 모드로 전환되면 도커 컨테이너가 동기화되지 않습니다.

https://forums.docker.com/t/time-in-container-is-out-of-sync/16566

나는 여기에 그것에 대해 게시물을 올렸습니다. 인증서는 항상 도커에서 5일 전에 만료됩니다.

윈도우즈 기능에서 Hyper-V를 사용하면 다음과 같은 문제가 해결되었습니다.Windows 기능

어떤 이유로든 이 대답들은 제 문제를 해결하지 못했습니다.

제가 만들고 있는 이미지의 도커 날짜/시간과는 아무런 관련이 없습니다.그것은 나의 지역 WSL 날짜 시간과 관련이 있습니다.

내가 한번 뛰었을때sudo ntpdate-debian모든 것이 통했습니다.

ntp가 없으면 설치하고 명령을 실행합니다.debian을 사용하지 않으면 셸 스크립트 ntpdate-debian을 사용하지 않을 수 있지만 사용할 수 있습니다.ntpd -gq뿐만 아니라.기본적으로 당신의 WSL 디스트리뷰터의 날짜를 업데이트하세요.

이 코드는 나에게 효과가 있었습니다.

docker run -e TZ="$(cat /etc/timezone)" myimage

언급URL : https://stackoverflow.com/questions/24551592/how-to-make-sure-dockers-time-syncs-with-that-of-the-host

반응형