카테고리 없음

컨테이너화 이후 기준시 문제

dev-diver 2025. 4. 15. 23:07

문제

원래 스케줄
도커 배포 이후 스케줄

도커 배포 이후에 데이터가 변한게 없는데도 불구하고 위와 같이 스케줄이 보였다.

Response 비교

정상적으로 들어오는 response
컨테이너화 했을 때 들어오는 response

컨테이너화 이후에는 startDate, endDate의 timeZone이 설정이 안 되고 있다.
확인 결과 실제 db에는 timezone정보를 따로 저장하지 않고, 쿼리 시에 DSN에서만 local로 요청하고 있었다.

"DSN": "계정:password@tcp(192.xxx.124.163:4306)/database_name?parseTime=true&loc=Local",

 

그런데 도커화 전에는 머신의 시간 자체가  한국 시간으로 돼있어서 잘 돌아갔던 것이다.

timedatectl로 머신 기준시 확인

그런데 도커는 서버가 docker에서 설정한 image 안에서 돌기 때문에, 기준시를 따로 설정해주지 않으면 UTC가 기준이 된다.
이를 고쳐주기 위해 go를 build하는 image에 기준시를 넣어주었다.

# Go 빌드 스테이지
FROM golang:1.23 as go-builder
WORKDIR /app
COPY . .
RUN go mod tidy
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o cis .

# 최종 스테이지
FROM alpine:latest

RUN apk add --no-cache tzdata  //여기서 타임존
ENV TZ=Asia/Seoul              //설정

WORKDIR /app
COPY --from=go-builder /app/cis .
RUN chmod +x /app/cis
CMD ["/app/cis"]

해결이 잘 됐다.