Friday, December 13, 2024

Set time zone for container docker

  • ประเด็นคือ ใหม่กับ container docker เลยพึ่งรู้ว่า container มี timezone ของตัวเองเป็น UTC
  • อยากจะแก้เป็น +07 Asia/Bangkok

Option 1 

  • ตั้งค่าตอนจะรัน container (ถ้า image support TZ environment e.g. Debian,Ubuntu,Alpine)

$ docker run -e TZ=Asia/Bangkok -d your-image

  • หรือ monting จาก host แม่มาใช้

$ docker run -v /etc/localtime:/etc/localtime:ro -v /etc/timezone:/etc/timezone:ro -d your-image

Option 2 
  • ตั้งตอนอัพเดท image ใน Dockfile
FROM ubuntu:22.04

# Install tzdata and set the time zone
RUN apt-get update && apt-get install -y tzdata && \
    ln -fs /usr/share/zoneinfo/Asia/Bangkok /etc/localtime && \
    dpkg-reconfigure -f noninteractive tzdata

  • แล้วก็สั่ง build image จาก Dockfile
$ docker build -t your-image .
Option 3 
  • อัพเดท container  ที่กำลังรันอยู่ 

$ docker exec -it your-container-name /bin/bash

# apt-get update && apt-get install -y tzdata
# ln -fs /usr/share/zoneinfo/Asia/Bangkok /etc/localtime
# dpkg-reconfigure -f noninteractive tzdata
  • ใน option 3 จะทำให้ container หยุดทำงานต้องสั่ง รันใหม่ แต่ถ้าคอนฟิกแล้วจะให้ restart auto ก็อย่าลืม set config container restart: always
Related
  • https://juuier.blogspot.com/2024/12/container-docker-restart-host-restart.html

Ref

  • https://chatgpt.com/share/675b9df0-89b0-8010-afae-159279c71aca

Wednesday, December 4, 2024

Container docker restart เองเมื่อ Host แม่ restart

  • ประเด็นคือ คิดไปเองว่า เมื่อ restart เครื่องแม่แล้ว container docker เราต้องมาสั่ง start ด้วยตัวเอง
  • แต่มัน start auto หว่า ด้วย config นี้ใน docker-compose.yml

restart: always

  • ตอนแรกเข้าใจว่า config นี้คือ เราเข้าไปใน container แล้วแก้คอนฟิกภายใน สั่ง restart service ใน container แล้ว container มันจะ stop ไปเอง ถ้าเราต้องการให้มันมัน restart เองก็ใส่ config อย่างว่า
  • แต่มันได้ประโยชน์อีกอย่างที่พึ่งรู้คือ  restart เครื่อง host มันก็ start auto เองหว่า

เพิ่มเติม

  • ดูว่า container เรา set restart policy เป็นอย่างไรด้วยคำสั่ง

$ docker inspect --format '{{.HostConfig.RestartPolicy.Name}}' <container_name|id>

  • สั่ง update policy restart ของ container ที่ทำงานอยู่โดย

$ docker update --restart always <container_name|id>

  • หรือถ้าจะสั่งรัน container ใหม่คือ

$ docker run -d --restart unless-stopped <container_name|id>

Ex: $ docker update --restart always mysql

Ref

  • https://docs.docker.com/engine/containers/start-containers-automatically/

Popular Posts