문제 해결 / 코드가 외부 네트워크에 접근할 수 없음
스크립트 내에서 외부 네트워크에 접근할 수 없는 경우는 대부분 DNS, 방화벽 때문입니다.
구체적으로는 스크립트가 requests.get('http://bing.com')와 같은 코드를 실행할 때 다음과 같은 오류가 발생합니다:
Temporary failure in name resolutionConnection refusedConnection to bing.com timed out- 기타 네트워크 오류
다음 작업을 순서대로 수행하여 문제를 해결할 수 있습니다:
- 호스트 머신에서
ping 8.8.8.8을 실행하여 호스트 머신이 공용 네트워크에 접근할 수 있는지 확인합니다 - 호스트 머신에서
curl http://bing.com을 실행하여 호스트 머신의 DNS가 정상인지 확인합니다 docker exec -it {DataFlux Func 컨테이너 ID} sh -c 'exec ping 8.8.8.8'를 실행하여 컨테이너 내부에서 공용 네트워크에 접근할 수 있는지 확인합니다docker exec -it {DataFlux Func 컨테이너 ID} sh -c 'exec curl http://bing.com -i'를 실행하여 컨테이너 내부의 DNS가 정상인지 확인합니다
8.8.8.8은 흔히 사용되는 공용 DNS 서버의 주소입니다
설치된 DataFlux Func 이미지에 ping 명령이 없다면 curl http://{IP 주소} 명령으로 대체할 수도 있습니다
가능한 원인 및 해결 방법:
| 가능한 원인 | 해결 방법 |
|---|---|
| 호스트 머신이 공용 네트워크에 접근할 수 없거나 DNS가 비정상 | 운영 체제 네트워크 구성을 확인하고 조정 |
| 컨테이너 내부에서 공용 네트워크에 접근할 수 없거나 DNS가 비정상 | Docker 관련 구성을 확인하고 조정하며, 필요한 경우 운영 체제 네트워크 구성도 확인합니다 |
Docker DNS 구성 참조
/etc/docker/daemon.json 파일을 편집하고 다음 내용을 추가한 후 저장하고 Docker 서비스를 다시 시작하세요:
| JSON | |
|---|---|
1 2 3 4 5 6 | |