Jost Do It.

그냥 IT해.

반응형

서버 및 환경/Utils 20

[Docker] 스크립트 변경 내용이 컨테이너에 적용되지 않을 때

1. 개요도커 컴포즈를 통해 컨테이너를 실행하는 환경에서 일부 서비스의 스크립트 내용이 변경돼 컨테이너를 재실행하였다.docker compose downdocker compose up하지만 변경된 스크립트 내용들이 컨테이너에 반영되지 않고, 여전히 이전 스크립트 내용으로 실행되는걸 확인하였다. 아래 명령어로 이미지를 재빌드를 해도 변경된 스크립트 내용은 반영되지 않았다.docker compose build --no-cache 2. 원인도커는 이미지를 생성하고, 그 이미지를 통해 컨테이너를 실행한다.그리고 컨테이너를 재실행하면 기존 이미지를 재사용해 컨테이너를 다시 생성한다.도커의 이미지 목록은 다음 명령어로 확인할 수 있다.docker image ls  만약 기존 서비스 내용들에서 변경이 생긴다면 doc..

[Kafka] 클라이언트와 서버간 time zone 문제 (Negative message latency=-32376435 ms)

개요카프카에서 다음과 같은 로그내용이 작업간격마다 발생하는 문제가 발생했습니다.카프카에는 로그 cleaner가 동작해 해당 로그내용들이 일정주기마다 제거되고 있었지만, 도커 내부 컨테이너에서 해당 로그들이 따로 저장돼 문제가 발생했습니다.로그가 초마다 수백개씩 쌓여 하루에 GB단위의 로그가 축적되고 있었고, 발견했을 때는 디스크 용량을 거의 잠식한 상태였습니다 (TB단위).도커 log configuration을 수정해 쌓이는 로그 크기를 조절할 수도 있지만, 근본적으로 위 문제가 발생하는 원인을 파악하고 해결하는 것을 우선합니다.원인This is a log message indicating a warning about a negative message latency of -32389513 millisec..

[FastAPI] 딕셔너리 내 null 값을 return 하는 법

상황사내 API에서는 요청 쿼리의 결과 값에 wrapper를 씌워서 아래와 같이 내부 정의 응답코드, 요청 url 쿼리, data 등을 출력한다.  즉, 실제 결과는 data 파라미터에 딕셔너리 형태로 출력되는데, 여기서 data에 null 출력을 위해 nan, None 값이 포함되면 다음 에러가 발생한다.Traceback (most recent call last): File "/home/mining/projects/finance_advisor/some_money/somemoney_api_server/somemoney_api_server/sub_noAuth.py", line 215, in api_middleware response = await call_next(request) File "/ho..

[Docker] 컨테이너 No CUDA GPUs are available 에러 발생 해결방법

문제상황 nvidia-docker2를 설치하고 컨테이너 내부에서 GPU접근을 가능하게 하였다. 그런데 데스크톱을 재부팅해서 torch 모듈을 실행하니 다음 에러가 발생했다. RuntimeError: No CUDA GPUs are available 컨테이너 내부에서 nvidia-smi 명령을 해보니 다음과 같은 에러도 발생한다. nvidia-smi >>> Failed to initialize NVML: Unknown Error 문제 원인 호스트가 systemd를 사용해 container의 cgroup을 관리하는 경우, Nvidia GPU를 참조하는 유닛파일들이 reload될 수 있다. 여기서 유닛파일들이 reload되면 컨테이너는 reload 된 유닛파일에 대한 접근권한이 없기 때문에 발생하는 에러이다. ..

[Airflow] retry와 상관없이 특정 시간 이후 task fail시키기

개요 에어플로우에서는 task가 실패했을 때 재실행 하는 방법을 제공하고 있다. 재실행은 다음과 같이 설정할 수 있다. import pendulum from airflow import DAG from airflow.operators.bash import BashOperator from datetime import timedelta default_args = { 'owner': 'heenj', 'retries': 6, # 재실행 횟수 'retry_delay': timedelta(minutes=10) # 재실행 대기 시간 } with DAG( dag_id='retry_dag', default_args=default_args, start_date=datetime(2024, 3, 1, tzinfo=pendulu..

[conda] base 환경은 다른 가상환경 패키지에 모두 영향을 미친다!

개요 어느날 개발서버에서 잘 작동하던 FastAPI에서 에러가 발생했다. 에러는 특정 라이브러리의 함수를 찾을 수 없다는 내용이다. Traceback (most recent call last): File "/home/mining/projects/finance_advisor/some_money/somemoney_api_server/scripts/../run.py", line 30, in from somemoney_api_server.security import user File "/home/mining/projects/finance_advisor/some_money/somemoney_api_server/somemoney_api_server/security/user.py", line 17, in from f..

[Docker] 컨테이너 내 pip 패키지 설치 시 RuntimeError 문제

문제 상황 파이썬 컨테이너를 띄우고 내부에 패키지를 설치하던 중 아래 에러가 발생하였다. pip install -r requirements.txt [...] Traceback (most recent call last): File "/usr/lib/python3/dist-packages/pip/_internal/cli/base_command.py", line 165, in exc_logging_wrapper status = run_func(*args) File "/usr/lib/python3/dist-packages/pip/_internal/cli/req_command.py", line 205, in wrapper return func(self, options, args) File "/usr/lib/pyt..

[conda] bash script에서 conda 명령어가 작동하지 않을 때

문제 상황 아나콘다를 설치하고 command 창에서는 conda 명령어가 동작하는데 script 내에서는 conda command를 찾을 수 없다는 에러가 나왔다. test.sh: line 2: conda: command not found 문제 원인 conda 명령어는 bash function인데, shell 내에서는 해당 bash function에 대한 정보가 없기 때문에 발생하는 에러다. 서버에 로그인하면 .bashrc가 실행되는데 .bashrc에는 conda function에 대한 initialize가되어 커맨드창에서는 conda 함수를 사용할 수 있다. 아래는 .bashrc에 선언된 conda initialize 명령이다. [...] # >>> conda initialize >>> # !! Con..

[VSCode] Wating for server log... 반복되다 연결이 안되는 문제

문제 상황 서버 연결에 VScode를 사용 중이다. 어느날부터 서버 연결 시 Wating for server log... 로그가 무한 반복 생성되다가 연결이 Cancel되는 문제가 발생했다. 문제 원인 VScode가 오래된 리눅스 버전에 대해 지원을 종료하면서 나타난 이슈다. 참고로 우리회사 서버의 리눅스 버전은 CentOS 7과 CentOS 18-04였다. VSCode에서는 공지를 했겠지만 해당 이슈가 워낙 갑작스럽다보니 깃헙 이슈가 굉장히 뜨거워진걸 볼 수 있다. 해결 방법 근본적으로 오래된 서버의 리눅스 버전을 업그레이드 시키는 것이 베스트겠지만 어떤 이슈가 생길지 몰라 바로 적용 하긴 어려웠다. 대신 VScode 구버전으로 다운받으면 해당 문제를 해결할 수 있다. 구버전은 1.85로 다운받으면 된..

[docker] 유저에게 도커 권한 주기

개요 루트 계정이 아니면 특정 도커 명령어를 사용할 때마다 sudo를 적어줘야된다. 아래 방법으로 유저에게 도커 권한을 주면 sudo 명령어를 적지 않아도 된다. 방법 도커를 설치하면 호스트 내 도커 그룹이 생성된다. 아래 명령어를 통해 도커 그룹에 사용자를 추가하면 된다. sudo usermod -aG docker {유저명} 여기서 {유저명} 부분에 추가할 사용자명을 입력하면 된다. 나는 heenj라는 유저명을 입력했다. 제대로 적용됐는지 확인하기 위해 다음 명령어를 실행한다. cat /etc/group 그럼 아래와 같이 group명 docker에 heenj 유저가 할당된 것을 확인할 수 있다. Reference https://seulcode.tistory.com/557

반응형