목록All (45)
ㅇ.ㅇ
상황docker-compose.yml 파일에 postgres:13 이미지를 추가하고 컨테이너 구동 했으나, 다음과 같은 에러가 발생. 에러Postgres container failing with initdb error: program "postgres" is needed by initdb but was not found. 원인위 에러는 postgres:13 이미지가 Docker 19 버전과의 호환성 문제로 인해 발생하는 것으로 보임. postgres:13 이미지가 최신 운영 체제와 패키지 호환성을 위해 업데이트된 환경을 사용하면서, Docker의 특정 버전에서는 필요한 패키지나 파일 경로가 다르거나 누락되어 이 문제가 발생할 수 있음. 해결 과정 이미지 버전을 postgres:13에서 postgres..
상황Docker 버전 19.x를 사용하는 CentOS 서버에서 특정 tomcat 공식 이미지를 컨테이너로 구동하였을 시 해당 에러 발생 에러Tomcat 9 running on docker - Cannot find /usr/local/tomcat/bin/setclasspath.sh 원인이 에러는 Docker 19의 오래된 libseccomp 버전이 최신 Tomcat 이미지에서 사용하는 시스템 호출을 인식하지 못해 발생하는 호환성 문제이다. 최신 Tomcat 이미지는 최신 Linux 커널과 libseccomp 버전에서 제공하는 새로운 시스템 호출을 사용하지만, Docker 19 버전에서는 이를 지원하지 못해 필요한 파일(/usr/local/tomcat/bin/setclasspath.sh)을 찾지 못하는 문제..
상황해당 에러 발생 전에 꺼져있던 방화벽을 켰는데, 그 이후로 Docker 컨테이너 실행 할 때 아래의 에러 발생. 에러Failed to Setup IP tables: Unable to enable SKIP DNAT rule: (iptables failed: iptables --wait -t nat -I DOCKER -i br-eb84ca430943 -j RETURN: iptables: No chain/target/match by that name. 원인 방화벽 서비스(firewalld)가 활성화되거나 재시작될 때 iptables 규칙을 재정의하면서 기존 Docker 관련 체인(DOCKER 체인)이 삭제될 수 있다. Docker는 네트워크 트래픽 관리를 위해 iptables의 고유 체인을 사용하므로, 방..
Docker 컨테이너 관리 명령어docker ps -a : 현재 시스템에 있는 모든 컨테이너의 목록을 표시docker ps : 현재 시스템에 있는 실행중인 컨테이너의 목록을 표시docker stop [id/name] : 지정된 컨테이너를 중지docker start [id/name] : 지정된 컨테이너 시작docker restart [id/name] : 지정된 컨테이너를 중지하고 다시 시작docker logs [id] : 지정된 컨테이너의 로그를 표시docker logs -f [id] : 실시간 로그 확인docker inspect [id] : 특정 컨테이너의 상세 정보 확인docker rm -f [id] : 특정 컨테이너 제거-f : 실행중인 컨테이너 먼저 정지 시킨 후 제거docker exec -it [..
1. 이미지명 규칙레지스트리주소/프로젝트명/이미지명:이미지태그레지스트리 주소어떤 레지스트리 사용할지 결정도커 허브말고도 다른 종류의 레지스트리를 사용할 수 있으니까비워져있을 때는 기본 레지스트리인 docker.io (도커허브) 주소가 기본값이 된다.프로젝트명비워져있을 때는 도커가 검증한 오피셜 이미지들이 속해있는 library가 기본값이 된다.그러므로 프로젝트명을 따로 지정하지 않으면 공식 이미지를 다운받게 된다.이미지태그이미지 버전을 뜻함숫자와 영문 모두 사용 가능비워져있을 때는 최신버전을 의미하는 latest가 기본값이 된다. 2. 이미지 종류Docker OFFICIAL IMAGE도커 오피셜 인증 이미지VERIFIED PUBLISHER도커 직접 관리는 아니지만 영향력있는 회사에서 자체적으로 인증한 이..
Q. 도커 이미지를 war 파일처럼 파일 전송 같은 형식으로 전송이 가능할까?A. 직접적으로 파일 전송 방식으로 Docker 이미지를 다른 시스템으로 전송하는 것은 기본적으로 지원되지 않는다. 그러나, Docker 이미지를 저장하고 전송할 수 있는 방법은 있다. 명령어를 사용하여 이미지를 TAR 아카이브 파일로 저장할 수 있고, 이 파일을 다른 시스템으로 전송한 후 명령어를 통해 도커 이미지로 다시 로드할 수 있다!도커 이미지 tar 파일 변환즉, 위 방법을 사용하면 Docker 이미지를 TAR 아카이브 파일로 저장하여, 이메일, USB 드라이브, 클라우드 스토리지 등을 통해 다른 컴퓨터로 전송하여 사용할 수 있다. 이러한 방법은 인터넷 연결 없이도 Docker 이미지를 공유할 수 있는 효과적인 방법으로..
소스 코드를 짤 때, 하나 둘 import를 하게되면 어느순간 자동으로 wildcard(*)로 변환된다. 나는 이제껏 그게 당연하거라고 생각했는데 사실 이렇게 사용했을 시 야기되는 문제들이 있다. 와일드카드(*) 임포트의 문제점import java.util.*;와 같은 와일드카드 임포트는 java.util 패키지에 있는 모든 클래스를 임포트하겠다는 의미이다. 이 방식은 코드의 간결함 때문에 많이 사용되지만, 몇 가지 문제가 있다.가독성 저하어떤 클래스가 실제로 사용되고 있는지 명확하지 않다. 예를 들어, java.util에는 List, Map, Set 등 많은 클래스가 있는데, 코드에서 어떤 클래스를 사용하는지 한눈에 알기 어려워진다. 이로 인해 협업이나 유지보수 시 불편함이 생길 수 있다. 개발 컨벤..
이번에 천천히 TDD 공부를 해보면서 사용해봤던 테스트 관련 어노테이션을 정리해보려고 한다. 이렇게라도 한번 적지 않으면 그냥 계속 사용방법만 아는채로 사용하기 때문이다. 1. @TestJUnit5의 기본 테스트 메서드 어노테이션해당 메서드가 테스트 메서드임을 명시한다.메서드의 반환 타입이 void여야 하고, 파라미터를 받지 않는다.@Testvoid testAddition() { int result = Calculator.add(1, 2); assertEquals(3, result);} 2. @DisplayName테스트 메서드의 이름을 설명하는 어노테이션테스트를 더 직관적으로 이해할 수 있도록 이름을 지정할 수 있다.IDE에서 표시되는 이름으로, 한글이나 특수문자 사용도 가능하다.@Tes..
Utils는 아는만큼 더 빠르고 간편하게 코드를 작성할 수 있는 것 같다. 하나하나 일일이 찾아보지는 못하니까 우연히 알게되면 나중에 사용할 수 있도록 정리를 해보려고 한다. 오늘의 주인공은 FilenameUtils이다. 개념우선 FilenameUtils가 들어있는 Apache Commons IO는, 자바 언어를 위한 오픈소스 라이브러리로 다양한 기능을 제공한다. 이 라이브러리를 사용하면 파일 및 디렉토리 관리 작업을 더욱 쉽게 처리할 수 있으며, 그 때문에 다양한 자바 프로젝트에서 많이 사용되고 있다. FilenameUtils 클래스는 파일 경로, 파일명, 확장자 등을 다루기 위한 여러 유틸리티 메서드를 제공한다. 특히 Windows에서는 \를, Unix 계열 시스템에서는 /를 경로 구분자로 사용하는..
소켓통신을 구현하여 broadcasting으로 클라이언트에게 데이터를 보내는 중 json 형식이 깨지는 것을 발견하였고, 그것을 수정하는 과정에서 에러가 발생하였다. 막상 타입문제는 아니었지만 함께 적어본다.상황웹소켓에서 스케줄링을 하면서 브로드캐스팅으로 계속 데이터를 보내고 있는 상황이다. 그렇지만 여러 스케줄러가 하나의 'broadcast' 메소드를 호출하면서 충돌이 난 것을 확인하게 되었다.에러 내용The remote endpoint was in state [TEXT_FULL_WRITING] which is an invalid state for called method문제 원인스레드 동기화해당 에러는 원격서비스가 현재 텍스트 작성중인 상태로 '호출하려는 메서드에는 유효하지 않은 상태'인 경우에 ..