작성
·
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 오류가 발생하는 문제에 대해 말씀드리겠습니다. 이 문제는 보통 다음과 같은 원인에 의해 발생할 수 있습니다.
네트워크 설정 문제:
각 컨테이너가 ecommerce-network
에 연결되어 있기 때문에 HTTP 요청이 올바른 네트워크 인터페이스를 통해 전달되어야 합니다. docker inspect <컨테이너 이름>
을 사용하여 각 컨테이너가 올바로 네트워크에 연결되었는지 확인해 보세요.
CORS 설정:
API 게이트웨이 또는 서비스 내에서 CORS(Cross-Origin Resource Sharing) 설정이 필요할 수 있습니다. API 게이트웨이 설정 파일을 확인하여 CORS를 허용하고 있는지 확인해 보세요.
보안 설정(인증/인가):
사용자 서비스가 인증이나 인가를 요구할 때, 요청에 적절한 인증 정보(예: 토큰)가 포함되어야 합니다. Postman에서 요청할 때 필요한 헤더나 파라미터를 추가했는지 확인하세요.
환경 변수 설정:
환경 변수가 제대로 설정되지 않은 경우 403 오류가 발생할 수 있습니다. 특히, Spring Cloud의 설정 또는 RabbitMQ와 같은 외부 서비스 관련 설정이 올바른지 확인 바랍니다.
로그 확인:
각 컨테이너의 로그를 확인하여 더 구체적인 오류 메시지를 찾는 것도 도움이 됩니다. docker logs <컨테이너 이름>
명령어로 로그를 확인하시고, 문제가 발생하는 부분에 대한 힌트를 얻을 수 있습니다.
문제를 개선하려면 위의 체크리스트를 하나씩 점검하시고 필요시 설정을 조정하시기 바랍니다. 추가적인 로그 정보가 필요하면 공유해 주시면 더 구체적으로 도와드릴 수 있습니다.
참고: Spring Boot에서 CORS 설정 방법도 확인해 보세요.
Chat GPT 답변과 거의 동일하네요. 혹시 다른 해결책이 있을까 기대했었는데 아쉽습니다. 강의 내용과 다른 스프링부트 버전(현재 사용 중인 버전: 스프링부트 3.3.4)을 사용하면서 등장하는 문제는 아닌지도 궁금합니다.