본문 바로가기

잡다/docker

(12)
[오늘의 삽질] local 환경에서의 docker & Error: connect EHOSTUNREACH https://betterstack.com/community/guides/scaling-nodejs/nodejs-errors/#8-ehostunreach EHOSTTURNREACH 에러는 소프트웨어가 네트워크 / 호스트에 대한 경로를 찾지 못해 TCP 연결에 실패했음을 의미한다. 이 에러가 발생하는 경우 방화벽 등에 의해 트래픽이 차단된 것일 수 있으므로 방화벽 시스템이나 인바운드 규칙 등을 살펴보라고 한다. 로컬의 다른 어플리케이션으로는 연결이 되지만, docker 컨테이너 환경에서만 유난히 동작하지 않는 경우 docker 환경 자체에 에러가 발생한 것일 수 있다( 특히 window 환경이라면 ). 컴퓨터 또는 도커 환경을 재부팅해보자. 윈도우: docker desktop을 재시작한다. 다른 환경: s..
[docker] restart policy https://docs.docker.com/config/containers/start-containers-automatically/ Start containers automatically docs.docker.com docker 옵션 중 컨테이너가 종료되었을 때 어떻게 반응할지 지정하기 위한 'restart' 옵션이 존재한다. 서버의 경우 어떤 오류가 발생하더라도 계속 활성화된 상태를 유지해야 하는데, 이를 위해 현재 옵션을 지정할 수 있다. "no": 컨테이너를 재시작하지 않는다. 기본 옵션. 큰따옴표가 붙는 이유는 yml 파일에서 "no"가 false을 의미하기 때문 on-failure[:max-retries]: 컨테이너가 비정상적으로 종료되었을 때 ( exit code != 0 일 때 ) 최대 ma..
[오늘의삽질] 도커와 커널: 아주 구 버전의 이미지는 호환되지 않을 수 있다 ubuntu 10.04를 docker 환경에서 돌리려는 시도에 실패하다. 리눅스에 존재했던 Set-UID와 관련된 보안 약점을 실습하는 과제를 하고 있었다. 그런데 최근에 사용되고 있는 wsl2 환경의 ubuntu 환경의 경우 해당 약점에 대한 대응 패치가 이미 진행되었으므로, 상당히 오래된 버전의 리눅스가 필요했다. 이때 현재 컴퓨터에 오래된 리눅스 버전을 설치하는 것은 거부감이 들었기 때문에, docker을 이용하여 격리된 환경에서 구 버전의 운영체제를 이용하여 과제를 진행하는 것을 목표로 docker hub에서 여러 이미지를 찾았다. docker hub 상의 ubuntu 버전 중 가장 오래된 것은 ubuntu 10.04 LTS 버전이었다. 우분투의 버전은 해당 버전이 등장한 년도와 달을 의미한다는 ..
[docker] 도커파일 예시 오랜만에 도커를 사용하려고 하니 사용법이 잘 기억이 나지 않았다. 일종의 snipset으로 사용했던 코드를 올려둔다. docker.compose.yml : aws을 사용할거라면 postgresql은 따로 포함하지 않아도 알아서 처리해준다. version: "3" services: client: image: "blaxsior/multi-client" mem_limit: 128m hostname: client server: image: "blaxsior/multi-server" mem_limit: 128m hostname: api environment: - REDIS_HOST=$REDIS_HOST - REDIS_PORT=$REDIS_PORT - PGUSER=$PGUSER - PGHOST=$PGHOST - P..
[docker] 오늘의 삽질 : nginx : host not found in upstream ~ 에러 docker compose 이용하여 여러개의 도커 컨테이너를 조합한 서버를 만들고 있었다. 이후 docker compose up 명령을 통해 도커 컨테이너들을 실행하는 도중, nginx 와 관련된 콘솔 창에서 다음과 같은 에러의 발생을 알렸다. 대략 upstream 으로 지정한 client:3000 을 발견할 수 없다는 메시지로 보인다. 이 에러는 무엇일까? 해당 문제가 발생했을 때 사용된 코드는 다음과 같다. nginx : default.conf upstream client { server client:3000; } upstream api { server api:5000; } server { listen 80; location / { proxy_pass http://client; } location /..
[docker] cli 명령어들 도커에서 이미지나 컨테이너와 관련된 작업을 하기 위해서는 docker client 상에 정의된 명령어를 이용해야 한다. 여기서는 중요한 명령어 몇가지를 정리한다. 도움말 docker --help 각종 명령 뒤에 --help 을 덧붙이면 해당 명령에 대한 여러 옵션이나 도움말 등을 볼 수 있다. docker run 도커 이미지로부터 컨테이너를 생성한 후 실행하는 명령이다. run 명령은 생성(create) + 실행(start) 2개 명령이 조합된 것으로, 컨테이너를 쉽게 실행하기 위한 줄임 명령이라고 생각할 수 있다. docker run [options] image_name [command] options : 대상이 되는 이미지에 대해 적용할 옵션. image_name : 다운로드 할 이미지 이름. htt..
[docker] Vmmem 이 지나치게 메모리를 잡아먹는 현상 문제점 윈도우 운영체제에서 WSL2를 이용하여 도커 사용 중 우연히 작업관리자를 보았는데, Vmmem이라는 프로그램이 엄청난 양의 메모리를 사용하고 있다는 사실을 알게 되었다. Vmmem은 윈도우 환경에서 WSL을 이용할 때 사용하는 프로그램으로, 윈도우 환경에서 리눅스 운영체제를 구현하기 위해 사용되는 가상 머신이라고 한다. 인터넷을 통해 찾아본 결과, 많은 사람들이 WSL 에서 WSL2로 업데이트 한 이후 메모리를 과다하게 이용 + 메모리 해제가 되지 않는 현상을 겪었다고 한다. 이 현상은 docker desktop을 이용할 때 더욱 두드러진다. docker-desktop 사용시 WSL2 환경에서 기본 운영체제 이외의 다른 서비스도 함께 시작되는데, 해당 환경들이 상당한 메모리를 잡아먹고도 제대로 메..
[docker] 오늘의 삽질 : nginx 서버, ERR_EMPTY_RESPONSE 에러 문제점 Dockerfile의 내용을 다음과 같이 구성했다. FROM node:alpine as builder WORKDIR '/home/node/app' RUN chown -R node:node . COPY package.json . RUN npm install COPY . . #volume 같은 것은 개발 단계에나 의미 있는 코드지, 이미 개발된 코드에서는 관심 영역이 아님. # USER node RUN npm run build # /home/node/app # USER root # RUN Phase FROM nginx COPY --from=builder /home/node/app/build /usr/share/nginx/html 이후 다음 명령을 shell 상에 순서대로 입력했다. docker bui..