강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

똘똘이님의 프로필 이미지
똘똘이

작성한 질문수

docker container 생성 후 애플리케이션 동작시 403 forbidden 오류 발생

작성

·

114

0

config-service, discovery-service, apigateway-service, user-service, order-service를 각각 build한 다음 java -jar [각 service 파일]의 명령으로 구동시키고 postman으로 전체 애플리케이션의 동작을 확인한 결과 전체적으로 잘 동작합니다. 그런데 이 파일들을 각각 docker container로 생성하고 실행하였더니, user-service에 대한 서비스 요청(예를 들면, 127.0.0.1:8000/user-service/users)을 실행하면 403 forbidden 오류가 발생합니다. 무엇이 문제인가요? 강의에 나온 것처럼 docker container는 모두 다음과 같이 생성하였습니다. 문제의 발생 가능성을 줄이고자 mariadb는 사용하지 않고 h2DB를 사용하고 있으며, zookeeper와 kafka를 사용하지 않았습니다.

- docker network 생성

docker network create --gateway 172.18.0.1 --subnet 172.18.0.0/16 ecommerce-network


- rabbitMQ 컨테이너 생성

docker run -d --name rabbitmq --network ecommerce-network -p 15672:15672 -p 5672:5672 -p 15671:15671 -p 5671:5671 -p 4369:4369 -e RABBITMQ_DEFAULT_USER=guest -e RABBITMQ_DEFAULT_PASS=guest rabbitmq:management

 

- configuration 컨테이너 생성

docker run -d -p 8888:8888 --network ecommerce-network -e "spring.rabbitmq.host=rabbitmq" -e "spring.profiles.active=default" --name config-service him333/config-service:1.0

 

- discovery 컨테이너 생성

docker run -d -p 8761:8761 --network ecommerce-network -e "spring.cloud.config.uri=http://config-service:8888" --name discovery-service him333/discovery-service:1.0

 

- apigateway 컨테이너 생성

docker run -d -p 8000:8000 --network ecommerce-network -e "spring.cloud.config.uri=http://config-service:8888" -e "spring.rabbitmq.host=rabbitmq" -e "eureka.client.serviceUrl.defaultZone=http://discovery-service:8761/eureka/" --name apigateway-service him333/apigateway-service:1.0

 

- order 컨테이너 생성

docker run -d --network ecommerce-network --name order-service -e "eureka.client.serviceUrl.defaultZone=http://discovery-service:8761/eureka/" -e "logging.file=/api-logs/orders-ws.log" him333/order-service:1.0

 

- user 컨테이너 생성

docker run -d --network ecommerce-network --name user-service -e "spring.cloud.config.uri=http://config-service:8888" -e "spring.rabbitmq.host=rabbitmq" -e "eureka.client.serviceUrl.defaultZone=http://discovery-service:8761/eureka/" -e "logging.file=/api-logs/users-ws.log" him333/user-service:1.0

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.
똘똘이님, Docker 컨테이너 실행 시 403 Forbidden 오류가 발생하는 문제에 대해 말씀드리겠습니다. 이 문제는 보통 다음과 같은 원인에 의해 발생할 수 있습니다.

  1. 네트워크 설정 문제:
    각 컨테이너가 ecommerce-network에 연결되어 있기 때문에 HTTP 요청이 올바른 네트워크 인터페이스를 통해 전달되어야 합니다. docker inspect <컨테이너 이름>을 사용하여 각 컨테이너가 올바로 네트워크에 연결되었는지 확인해 보세요.

  2. CORS 설정:
    API 게이트웨이 또는 서비스 내에서 CORS(Cross-Origin Resource Sharing) 설정이 필요할 수 있습니다. API 게이트웨이 설정 파일을 확인하여 CORS를 허용하고 있는지 확인해 보세요.

  3. 보안 설정(인증/인가):
    사용자 서비스가 인증이나 인가를 요구할 때, 요청에 적절한 인증 정보(예: 토큰)가 포함되어야 합니다. Postman에서 요청할 때 필요한 헤더나 파라미터를 추가했는지 확인하세요.

  4. 환경 변수 설정:
    환경 변수가 제대로 설정되지 않은 경우 403 오류가 발생할 수 있습니다. 특히, Spring Cloud의 설정 또는 RabbitMQ와 같은 외부 서비스 관련 설정이 올바른지 확인 바랍니다.

  5. 로그 확인:
    각 컨테이너의 로그를 확인하여 더 구체적인 오류 메시지를 찾는 것도 도움이 됩니다. docker logs <컨테이너 이름> 명령어로 로그를 확인하시고, 문제가 발생하는 부분에 대한 힌트를 얻을 수 있습니다.

문제를 개선하려면 위의 체크리스트를 하나씩 점검하시고 필요시 설정을 조정하시기 바랍니다. 추가적인 로그 정보가 필요하면 공유해 주시면 더 구체적으로 도와드릴 수 있습니다.

참고: Spring Boot에서 CORS 설정 방법도 확인해 보세요.

똘똘이님의 프로필 이미지
똘똘이
질문자

Chat GPT 답변과 거의 동일하네요. 혹시 다른 해결책이 있을까 기대했었는데 아쉽습니다. 강의 내용과 다른 스프링부트 버전(현재 사용 중인 버전: 스프링부트 3.3.4)을 사용하면서 등장하는 문제는 아닌지도 궁금합니다.

똘똘이님의 프로필 이미지
똘똘이

작성한 질문수

질문하기