Docker Container thời gian và múi giờ (sẽ không phản ánh thay đổi)

Nơi nào Docker đựng của họ nhận được thông tin thời gian? Tôi đã tạo ra một số hộp đựng từ ubuntu cơ bản:đáng tin cậy ảnh, và khi tôi chạy, nó và yêu cầu 'ngày, tôi nhận GIỜ thời gian.

Cho một thời gian tôi đã xung quanh điều này bằng cách làm những điều sau tôi Dockerfile:

RUN sudo echo "America/Los_Angeles" > /etc/timezone

Tuy nhiên, đối với một số lý do mà dừng lại làm việc. Tìm kiếm trực tuyến tôi thấy dưới đây, đề nghị:

docker run -v /etc/timezone:/etc/timezone [image-name]

Cả những phương pháp này một cách chính xác thiết lập múi giờ mặc dù!

$ cat /etc/timezoneAmerica/Los_Angeles$ dateTue Apr 14 23:46:51 UTC 2015

Bất cứ ai biết gì?

Bí mật ở đây là dpkg-reconfigure tzdata chỉ đơn giản là tạo ra /etc/localtime như một bản sao, hardlink hoặc liên kết tượng trưng (một liên kết tượng trưng là ưu tiên) đến một file trong /usr/share/zoneinfo. Vì vậy, nó có thể làm điều này hoàn toàn từ Dockerfile. Xem xét:

ENV TZ=America/Los_AngelesRUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

Và như một phần thưởng, TSK sẽ được thiết lập một cách chính xác trong thùng là tốt.

Đây cũng là giấy phép, không cần biết, vì vậy nó hoạt động với khá nhiều bất kỳ Định.

Chú ý: nếu bạn đang sử dụng một núi cao dựa hình ảnh bạn có cài tzdata đầu tiên. (thấy vấn đề này ở đây)

Trông như thế này:

RUN apk add --no-cache tzdataENV TZ America/Los_Angeles

Thông thường, nó là đủ để thiết lập một môi trường biến trong thùng chứa docker như vậy:

docker run -e TZ=Europe/Amsterdam debian:jessie date

Tất nhiên, điều này sẽ làm việc cũng với docker-compose.

Bạn có thể thêm địa phương của các tập tin (/etc/giờ bị localtime) như khối lượng của docker-thùng chứa.

Cập nhật của bạn docker-compose.yml với những dòng.

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

Bây giờ các thùng chứa giờ cũng giống như trên máy chủ của bạn

Lắp /etc/localtime trong ảnh, do đó, nó được đồng bộ với host -v là phổ biến nhất một.

Nhưng xem vấn đề 12084:

đó là không chính xác bởi vì nó không làm việc khi phần mềm yêu cầu thay vì các tập tin /etc/timezone được thiết lập.
Bằng cách đó, cậu đang sử dụng lá nó như là việc định giá trị etc/UTC.

Tôi đã xác định rằng thực sự, đó là không hoàn hảo cách thanh lịch để thiết lập vùng thời gian bên trong một container docker.
Vì vậy, cuối cùng đã giải quyết trên giải pháp này:

Ứng dụng dockerfile:

# Relocate the timezone fileRUN mkdir -p /config/etc && mv /etc/timezone /config/etc/ && ln -s /config/etc/timezone /etc/

Ứng dụng entrypoint kịch bản:

# Set timezone as specified in /config/etc/timezonedpkg-reconfigure -f noninteractive tzdata

Khối lượng dữ liệu /config dockerfile, địa phương, đến một quốc gia cụ thể hoặc khu vực:

# Set the time zoneRUN echo "Europe/London" > /config/etc/timezone

... nó không phải là không thanh lịch, bởi vì liên quan đến 3 tập tin riêng biệt, và lại tạo ra /etc/localtime trên mỗi chạy container bắt đầu. Đó là khá lãng phí.

Tuy nhiên, nó không làm việc đúng, và đạt được thành công tách biệt giữa các cơ sở ứng dụng hình ảnh, và mỗi người mỗi nước địa hình.
Trong 3 dòng mã.

Trong windows 16.04 ảnh có lỗi. Được giải pháp

    ENV TZ 'Europe/Tallinn'    RUN echo $TZ > /etc/timezone && \    apt-get update && apt-get install -y tzdata && \    rm /etc/localtime && \    ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \    dpkg-reconfigure -f noninteractive tzdata && \    apt-get clean

Thêm hai xu của tôi ở đây, bởi vì tôi đã cố gắng nhiều trong số này, nhưng không có làm việc trên núi cao dựa trên hình ảnh.

Tuy nhiên, điều này đã lừa:

ENV TZ=America/TorontoRUN apk updateRUN apk upgradeRUN apk add ca-certificates && update-ca-certificatesRUN apk add --update tzdataRUN rm -rf /var/cache/apk/*

[Nguồn]

Trong núi cao cơ bản hình Ảnh (sử dụng ví dụ nút:10.16.0-núi cao):

Dockerfile

FROM node:10.16.0-alpineENV TZ=America/Los_AngelesRUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezoneWORKDIR /appCOPY package.json package-lock.json ./RUN npm i --productionCOPY . .CMD node index.js

Bằng cách sử dụng một Fedora thùng (khả năng để làm việc với mọi cũng):

Các giải pháp đơn giản nhất tôi thấy được sử dụng những điều sau docker-soạn.yml

environment:   TZ: "${TZ:-America/Los_Angeles}"

Sau đó bạn .ph thấy (mà docker-soạn tự động đọc)

TZ=America/Los_Angeles

Điều này cho phép bạn đặt docker-soạn.yml theo phiên bản kiểm soát và sử dụng một tùy chỉnh .mộ tập tin có thể bỏ qua đoàn.

Bạn có định giá trị cho các thùng chứa và bạn sẽ có được tùy tốt nhất của cả hai thế giới.

Cho Fedora không thay đổi khác là cần thiết, nó chỉ hoạt động!

nếu bạn đang sử dụng hình ảnh docker dựa trên ubuntu :

# Change the docker default timezone from UTC to SGTecho "Asia/Singapore" > /etc/timezonedpkg-reconfigure tzdatadate

Nhờ VonC cho các thông tin liên kết đến các vấn đề. Này, có vẻ như một phức tạp mớ hỗn độn, vì vậy, tôi đã làm một số thử nghiệm trên của riêng tôi tưởng làm thế nào để giải quyết việc này và nó dường như làm việc tuyệt vời.

>docker run -it ubuntu:trusty /bin/bash#dpkg-reconfigure tzdata

(làm theo hướng dẫn để chọn của tôi múi giờ)

>docker commit [container-id] chocko/ubuntu:local

Sau đó tôi cập nhật của tôi Dockerfiles để phản ánh này:

FROM chocko/ubuntu:local

Phải có cái gì đó sai trái với điều này vì nó có vẻ quá dễ dàng để bỏ qua... Hoặc là điều này có thể chấp nhận được?