도커 로그는 UTC+9적용 못하나요?

안녕하세요.
도커로 배포를 했습니다.
docker logs -f 컨테이너명
이렇게 하면 도커 로그가 나오잖아요.
근데 시간이 UTC0로 나오는 것 같아요.
Dockerfile에 ENV TZ=“Asia/Seoul” 넣어도 동일하네요.
물론 컨테이너에 console로 접속해서 date명령으로 확인해 보면 utc+9입니다.
호스트컴퓨터도 utc+9이구요.

몇몇 WebAPI는 스케줄을 걸어놓았는데 시간이 다르게 나오니 불편하네요.

좋아요 1

안녕하세요. 어떤 종류의 애플리케이션을 컨테이너로 빌드하셨는지, 그리고 베이스 이미지를 무엇으로 택하셨는지 알 수 없어, ASP.NET Core Kestrel 기준으로 나와있는 리소스가 있어 공유드려봅니다.

단순히 TZ 환경 변수 설정하는 것 말고도 추가 설정이 더 필요할 수 있으니 베이스 이미지 종류에 해당하는 설정 방법을 찾아보셔야 할 것 같습니다.

좋아요 2
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
ENV TZ="Asia/Seoul"

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["myWebAPI/myWebAPI.csproj", "myWebAPI/"]
RUN dotnet restore "myWebAPI/myWebAPI.csproj"
COPY . .
WORKDIR "/src/myWebAPI"
RUN dotnet build "myWebAPI.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "myWebAPI.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "myWebAPI.dll"]

제 Dockerfile입니다. 적어주신 것은 node인 것으로 보이는데요.

ENV TZ="Asia/Seoul"

이게 없으면 컨테이너조차 시간변경이 안 될 것 같습니다.
물론 환경변수이니 외부에서 설정할 수도 있긴 할 겁니다.

좋아요 1

적어주신 ENV TZ="Asia/Seoul" 라인 다음에 아래의 코드를 추가해보시면 어떨까요? 답변을 드리면서 살펴보셨으면 했던 부분은 #18의 아래 라인이었습니다.

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

덧. node 베이스 이미지 코드를 보내드렸나 해서 살펴봤더니 그렇진 않습니다.

아마 #10의 코드 RUN rm -rf node_modules && npm install 를 보시고 NodeJS 애플리케이션 빌드를 위한 이미지라고 보신 것 같네요. 보내드린 Dockerfile 코드는 정확히 ASP.NET Core 애플리케이션을 빌드하고 띄우기 위한 코드가 맞습니다.

Dockerfile for asp dotnet core with timezone change, npm install, and two-stage build process. This uses the ‘aspnetcore-build’ container to produce the build with ALL of the SDK dependencies, and the ‘aspnetcore’ container to run the code itself, cutting down the production container’s size.

참고로 프론트엔드 NodeJS 애플리케이션과 ASP.NET Core를 동시에 혼합해서 사용하는 ASP.NET Core 애플리케이션도 많습니다.

다만 너무 옛날 코드라서 실존하는 베이스 이미지가 아닌 부분이 있었는데 이건 제가 확인을 안하고 답을 드린 것 같네요. 현재는 mcr.microsoft.com 서버를 사용하도록 모두 통일되어있고, MS에서는 Docker Hub에 안내 페이지만 남겨놓고 이미지를 모두 Docker Hub에서는 제거한 것 같습니다.

좋아요 2

답글 주셔서 항상 감사하게 생각하고 있습니다.
알려주신 localtime파일을 변경하는 방법은 우분투에서 설정하는 방법으로 알고 있습니다.
(공식문서는 아니었고 어느 블로그에서 확인을 했습니다.)
제가 사용하는 이미지는 debian기반이라 TZ만 변경하면 컨테이너는 시간이 변경이 됩니다.
링크를 걸어주는 것도 결국 컨테이너 내부의 작업이기 때문에 결과는 동일한 것으로 보입니다.
제 생각으로는 docker -t 프로세스가 호스트 컴퓨터에서 실행되니깐 호스트에 설정이 있을 것 같은데, 그걸 모르겠네요. 물론 이 생각 자체가 틀릴 수도 있겠지요.
그리고 위의 코드는 마치 vs에서 node프로젝트를 도커라이징한 것처럼 보이는데, netcore이미지를 포함한 것이니 제가 모르는게 맞는 것 같아요. ms는 docker를 인수할 생각은 없나 보네요.ㅎㅎ

좋아요 2

그렇군요. 괜찮으시다면 나중에 찾아본 내용을 답글로 다시 달아주시면 다른 분들께도 큰 도움이 될 것 같습니다!

Docker는 Docker Enterprise 부문을 Mirantis 사에 매각을 했고, Docker 데스크톱 제품과 Docker 회사 자체는 아직 매각에 대한 소식이 들리지는 않는 것 같습니다. 제품 자체 유료화를 단행하기도 했고, 수익성 개선을 위해서 많은 노력을 기울이는 것을 보면 근 시일 내에 매각을 고려하는 것 같진 않지만 상황을 지켜봐야 할 듯 합니다.

좋아요 2

늦은 시간인데 답글 주셔서 감사드립니다.

말씀하시는 것이 블로그 주소를 말씀하시는 건가요? :slight_smile:
히스토리에 남아 있을 것 같긴 합니다.
도커 회사 사정에 대해서도 잘 알고 계시네요. 항상 감사드립니다.

좋아요 1

이거 예전에 쿠버네티스 자동화 돌리다 봤었고 해결했었던 문제네요.

ENV TZ=Asia/Seoul
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

위에처럼 리눅스 폴더에 적용해주어야 타임존 적용이될거에요

쿠버네티스 사용해서 적용한거라 도커만 사용해선 될지는 모르겠네요

좋아요 1