How to make sure docker's time syncs with that of the host?

前端 未结 17 1480
北恋
北恋 2020-12-02 07:10

I have dockers running on Linode servers. At times, I see that the time is not right on the dockers. Currently I have changed the run script in every docker to include the f

相关标签:
17条回答
  • 2020-12-02 07:26

    It appears there can by time drift if you're using Docker Machine, as this response suggests: https://stackoverflow.com/a/26454059/105562 , due to VirtualBox.

    Quick and easy fix is to just restart your VM:

    docker-machine restart default
    
    0 讨论(0)
  • 2020-12-02 07:27

    This is what worked for me with a Fedora 20 host. I ran a container using:

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

    Initially /etc/localtime was a soft link to /usr/share/zoneinfo/Asia/Kolkata which Indian Standard Time. Executing date inside the container showed me same time as that on the host. I exited from the shell and stopped the container using docker stop <container-id>.

    Next, I removed this file and made it link to /usr/share/zoneinfo/Singapore for testing purpose. Host time was set to Singapore time zone. And then did docker start <container-id>. Then accessed its shell again using nsenter and found that time was now set to Singapore time zone.

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

    So the key here is to use -v /etc/localtime:/etc/localtime:ro when you run the container first time. I found it on this link.

    Hope it helps.

    0 讨论(0)
  • 2020-12-02 07:29

    Docker Usage

    Here's a complete example which builds a docker image for a go app in a multistage build. It shows how to include the timezone in your image.

    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"]
    
    0 讨论(0)
  • 2020-12-02 07:31

    I was facing a time offset of -1hour and 4min

    Restarting Docker itself fixed the issue for me.

    To set the timezone in general:

    1. ssh into your container: docker exec -it my_website_name bash

    2. run dpkg-reconfigure tzdata

    3. run date
    0 讨论(0)
  • 2020-12-02 07:32

    With docker for windows I had to tick

    MobyLinuxVM > Settings > Integration Services > Time synchronization 
    

    in Hyper-V manager and it worked

    0 讨论(0)
  • 2020-12-02 07:35

    If you are using boot2docker and ntp doesn't work inside the docker VM (you are behind a proxy which does not forward ntp packets) but your host is time-synced, you can run the following from your host:

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

    This way you are sending your machine's current time (in UTC timezone) as a string to set the docker VM time using date (again in UTC timezone).

    NOTE: in Windows, inside a bash shell (from the msys git), use:

    docker-machine.exe ssh default "sudo date -u $(date -u +%m%d%H%M%Y)"
    
    0 讨论(0)
提交回复
热议问题