DynamoDB 로컬: 이미 사용 중인 주소(포트 8000)
TL;DR — DynamoDB Local은 기본적으로 포트 8000을 바인딩하며 무언가가 이미 이를 보유하고 있습니다. 즉, 중지하지 않은 이전 DynamoDB Local, 다른 서비스 또는 중복된 serverless-offline/컨테이너입니다. 포트 8000을 확보하거나 -port를 사용하여 다른 포트에서 로컬을 시작하십시오(클라이언트가 이를 가리키도록).
무엇을 의미하는가
Exception in thread "main" java.net.BindException: Address already in use
... Failed to bind to port 8000DynamoDB Local은 포트 8000에서 청취 소켓을 여는 Java 프로세스입니다. 해당 포트가 이미 바인딩된 경우 JVM은 이를 요청할 수 없으며 BindException로 종료됩니다. 이는 순전히 로컬 포트 충돌입니다. AWS 또는 자격 증명과는 아무 관련이 없습니다.
왜 발생하는가
- 이전 DynamoDB Local이 여전히 실행 중입니다 — 이전
java -jar DynamoDBLocal.jar(또는docker run) 동안 중지한 적이 없습니다. - 다른 서비스는 8000을 소유합니다. 즉, 동일한 포트에 있는 개발 서버, 프록시 또는 관련 없는 앱입니다.
- 중복 툴링 —
serverless-dynamodb-local및serverless-offline둘 다 8000 또는 2개의docker-compose up스택을 바인딩하려고 합니다. - 충돌된 인스턴스가 포트 바인드를 잠시 떠났거나(
TIME_WAIT), 좀비 컨테이너입니다.
서버리스 및 테스트 실행기
serverless-dynamodb-local 플러그인과 Jest globalSetup 후크가 자주 시작됩니다.
암시적으로 로컬 — docker run -p 8000:8000 amazon/dynamodb-local도 실행하는 경우
수동으로 로컬이 설정되었음에도 불구하고 두 번째 바인드 시도는 BindException로 종료됩니다.
이미 건강해요. 머신 세션당 하나의 런처를 선택하세요.
macOS에서는 IDE 테스트 실행기의 고아 Java 프로세스가 자주 발생합니다.
— lsof -i :8000는 종종 이전 Gradle 실행의 PID와 함께 java을 표시합니다.
어떻게 해결하는가
포트를 소유한 사람 찾기:
lsof -i :8000 # macOS / Linux netstat -ano | findstr :8000 # Windows (note the PID)해당 프로세스를 중지(또는 이전 DynamoDB Local):
kill <PID> # macOS / Linux taskkill /PID <PID> /F # Windows또는 다른 포트에서 DynamoDB Local을 실행하고 클라이언트를 업데이트합니다.
java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -port 8001 # then: endpoint = http://localhost:8001Docker? 매핑의 호스트 측(
-p 8001:8000)을 변경하고8001에 연결합니다.중복 플러그인/스택을 제거하여 하나의 프로세스만 포트 바인딩을 시도하도록 합니다.
DynoTable에서
포트 8000을 해제한 후(또는 로컬을 -port 8001로 이동), install DynoTable
설정 → 프로필 → 프로필 추가에서 로컬 프로필을 추가하세요. 엔드포인트 설정
http://localhost:8000(또는 대체 포트), 자리 표시자 지역 및
영숫자 더미 자격 증명. 연결 테스트를 통해 에뮬레이터가 다음과 같은지 확인합니다.
테이블을 탐색하기 전에 듣기. 연습:
Running DynamoDB Local · Connect to DynamoDB Local & LocalStack.
포트를 변경할 때 일치하도록 프로필 엔드포인트를 업데이트하세요. 프로필은 계속 유지됩니다.
:8000를 가리키는 동안 로컬은 :8001를 청취합니다.
connection refused 짝수
바인드 충돌이 해결된 후. DynamoDB JSON converter
로컬에 도달할 수 있으면 시드 데이터를 로드하는 데 도움이 됩니다.
관련 오류
- Unable to start DynamoDB Local process — 다른 이유로(Java, 네이티브 라이브러리) 에뮬레이터가 시작되지 않습니다.
- Could not connect to DynamoDB Local (ECONNREFUSED) — 반대면: 전화를 거는 곳에서는 아무것도 들리지 않습니다.
- 학습: Running DynamoDB Local
출처
- Deploying DynamoDB locally on your computer — AWS DynamoDB Developer Guide(기본 포트 8000, "포트 8000을 사용할 수 없는 경우 이 명령은 예외를 발생시킵니다.")
- DynamoDB local usage notes — AWS DynamoDB Developer Guide (
-port명령줄 옵션 및 전체 플래그 목록) - amazon/dynamodb-local — Docker Hub (공식 이미지 및 포트 매핑)