วิธีตั้ง timezone ให้ถูกต้อง Docker PHP 5.6 บน CentOS9


วิธีที่ 1 แก้ php.ini จากเครื่อง Host

1. สร้างไฟล์ php.ini บนเครื่อง host (ด้านนอก container):

mkdir -p /opt/php56
nano /opt/php56/php.ini

เพิ่มเนื้อหาเช่น:

date.timezone = Asia/Bangkok

2. แก้คำสั่ง docker run ให้ mount ไฟล์นี้เข้าไปใน container:

หยุด container เก่า:

docker stop php56-fpm
docker rm php56-fpm

รันใหม่โดย mount php.ini:

docker run -d \
  --name php56-fpm \
  -p 9006:9000 \
  -v /var/www/html/old-chaiyakul.com:/var/www/html/old-chaiyakul.com \
  -v /opt/php56/php.ini:/usr/local/etc/php/php.ini \
  --privileged \
  --restart unless-stopped \
  php:5.6-fpm

**หากหลัง reboot เกิด 503 Service Unavailable

ปัญหา 503 Service Unavailable หลัง reboot เกิดจาก Apache พยายามเชื่อมต่อกับ PHP-FPM ที่รันอยู่ใน Docker container ผ่าน proxy:fcgi://127.0.0.1:9006 แต่ container ยังไม่รัน หรือรันไม่ทัน ทำให้ Apache ไม่เจอ PHP-FPM จึงแสดง 503

วิธีแก้: ทำให้ Docker container php56-fpm รันอัตโนมัติหลัง reboot

1.ตรวจสอบว่า container ถูกตั้งให้ restart อัตโนมัติหรือไม่:

รันคำสั่งนี้:

docker inspect -f '{{ .HostConfig.RestartPolicy.Name }}' php56-fpm

ถ้าได้ผลลัพธ์เป็น no หรือว่างเปล่า แสดงว่ายัง ไม่ตั้งให้ restart

2.ตั้งค่าให้ container รันอัตโนมัติหลัง reboot:

รันคำสั่งนี้:

docker update --restart unless-stopped php56-fpm

ตัวเลือก unless-stopped คือ:

  • จะเริ่ม container อัตโนมัติหลัง reboot
  • ยกเว้นคุณหยุดมันด้วย docker stop เอง

3. reboot

reboot

วิธีที่ 2 (ชั่วคราว): ตั้งในไฟล์ PHP ด้วย date_default_timezone_set()

ใน index.php:

<?php
date_default_timezone_set("Asia/Bangkok");
phpinfo();

ตรวจสอบว่า timezone ถูกต้อง

โหลดเว็บอีกครั้ง แล้วดูในหน้า phpinfo() ตรงหัวข้อ dateDefault timezone
ควรเห็นว่าเป็น Asia/Bangkok

,